EntityFrame的简单实用

首先,什么是EF?(来自百度百科)

Entity Framework 利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity),而数据字段都转换为属性 (property),关系则转换为结合属性 (association),让数据库的 E/R 模型完全的转成对象模型,如此让程序设计师能用最熟悉的编程语言来调用访问。而在抽象化的结构之下,则是高度集成与对应结构的概念层、对应层和储存层,以 及支持 Entity Framework 的数据提供者 (provider),让数据访问的工作得以顺利与完整的进行。

(1) 概念层:负责向上的对象与属性显露与访问。
(2) 对应层:将上方的概念层和底下的储存层的数据结构对应在一起。
(3) 储存层:依不同数据库与数据结构,而显露出实体的数据结构体,和 Provider 一起,负责实际对数据库的访问和 SQL 的产生。

再来看看为什么用EF而不用原生的Ado.Net?(来自传智播客黑马就业班视频)

1.      极大的提高开发效率:EF是微软自己的产品,跟VS开发工具集成度比较好,开发中代码都是强类型的,写代码效率非常高,自动化程度非常高,命令的编程。

2.      EF提供的模型设计器非常强大,不仅仅带来了设计数据库的革命,也附带来的自动化生成模型代码的功能也极大的提高开发和架构的效率。

3.      EF跨数据库支持是ORM架构的主要功能点之一,带来的是可以通过仅仅改变配置就可以做到跨数据库的能力。

4.      缺陷:性能差(生成sql脚本阶段),在复杂查询的时候生成的sql脚本效率不是很高。

a)        不在数据端额外的消耗性能。

b)        根据xml映射关系以及实体的状态生成相应的sql脚本。

5.      适合做企业内部管理系统:进销存、CRM(客户关系管理系统)、HR(人力资源)、OA、ERP、政务系统。但是做互联网不适合用EF。

EF的简单应用

        /// <summary>
        /// 添加操作
        /// </summary>
        public void add()
        {
            //1.实例化实体上下文
            ceshiEntities dbContext = new ceshiEntities();

            //2.声明一个T_Student实体
            T_Student stu = new T_Student
            {
                Name = "sss",
                Class = "sss",
                College = "sss",
                School = "sss"
            };

            //3.告诉上下文对此实体进行添加操作
            dbContext.T_Student.Add(stu);
            //dbContext.Entry<T_Student>(stu).State = System.Data.EntityState.Added;

            //4.告诉上下文把实体的变化保存到数据库
            dbContext.SaveChanges();
        }
        /// <summary>
        /// 更新操作
        /// </summary>
        public void update()
        {
            //1.实例化实体上下文
            ceshiEntities dbContext = new ceshiEntities();

            //dbContext.Database.Connection.ConnectionString = "数据库连接字符串";//运行时修改链接字符串,用于加密重要信息

            //2.声明一个实体
            T_Student stu = new T_Student
            {
                Name = "ppp",
                Class = "ppp",
                College = "ppp",
                School = "ppp-----",
                ID = 1
            };

            //3.告诉上下文对此实体进行更新操作
            //由于数据库中ID是主键,因此EF可以根据主键ID判断Where判断条件

            //dbContext.T_Student.Attach(stu);//附加到上下文进行跟踪管理
            //dbContext.Entry<T_Student>(stu).State = System.Data.EntityState.Detached;//取消上下文对stu实体的跟踪,释放内存

            //dbContext.Entry<T_Student>(stu).State = System.Data.EntityState.Modified;//更新整个实体
            dbContext.Entry<T_Student>(stu).Property<string>(m => m.School).IsModified = true;//更新实体中的School字段
            //dbContext.Entry<T_Student>(stu).Property("School").IsModified = true;//更新实体中School字段

            //4.告诉上下文保存到数据库中
            dbContext.SaveChanges(); 
            
        }
        /// <summary>
        /// 查询操作
        /// </summary>
        public void select()
        {
            ceshiEntities dbContext = new ceshiEntities();

            直接使用EF
            //foreach (var stu in dbContext.T_Student.Where(s=>s.ID>1 || s.ID==1))
            //{
            //    Console.WriteLine(stu.ID + " " + stu.Name + " " + stu.Class + " " + stu.College + " " + stu.School);
            //} 
            使用Linq查询语句
            Linq表达式的返回值类型是IQueryable<T>
            //var query = from s in dbContext.T_Student
            //            where s.ID > 1 || s.ID==1
            //            select s;
            //foreach (var stu in query.ToList())
            //{
            //    Console.WriteLine(stu.ID + " " + stu.Name + " " + stu.Class + " " + stu.College + " " + stu.School);
            //}

            IQueryable<T_Student> temp = from u in dbContext.T_Student
                                         where u.ID > 1
                                         select u;
            //初始化了一下IQueryable接口里面的三个参数
            //1 Linnq表达式转成Expression类型
            //2 给Type ElementType赋值
            //3 给IQueryProvider赋值,EF的provider
            //当用到IQueryable接口的集合的数据的时候,provider解析Expression然后获取相应的数据。进行遍历执行
            
            IQueryable<object> parent = temp;

            //Dog aDog = new Dog();
            //Animal aAnimal = aDog;
            //List<Dog> lstDog = new List<Dog>();
            List<Animal> lstAnimal = lstDog;
            //List<Animal> lstAnimal2 = lstDog.Select(d => (Animal)d).ToList();
            //IEnumerable<Dog> idog = null;
            //IEnumerable<Animal> ianimal = idog;

            System.Linq.Expressions.Expression<Func<int, bool>> expression = a => a > 0;
        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值