技术(1)EF实体框架(一)

引言

           EF实体框架——你知道多少?宏观的学习和细致的深入,决定你成功的高度。

概述

           EF实体框架是ADO.NET中的一组支持开发面向数据的软件应用程序技术,是微软的一个ORM框架。这个概念你理解了吗?当然没有,确实很难理解,不过没事我们有简单的说法:EF实体框架是ORM思想的一个具体实现,ORM(Object—Relation—Mapping)照着英文直接理解为对象关系映射框架,恭喜你猜对了正是这个框架,不过ORM还叫数据持久化框架,了解即可。

内容

          下面来说EF的具体内容,先来幅图了解一下全局,不谋全局者,不足谋一域

     

        先对整体内容有一个宏观的把控,然后再深入研究。研究一个知识点,三步式我们都做的到:是什么?做什么?怎么做?不要忘记了多走一步——扩展。

         一 是什么?

              EF实体框架是什么,具体说就是一个框架。来源ORM,概念在概述里面叙述了,这里不再赘述。

         二 做什么?

               第一个问题?那么EF实体框架是用来做什么的哪?第一 用于支持开发人员通过对概念性应用程序模型编程(而不是直接对关系存储架构编程)来创建数据访问应用程序,也就是对实体对象编程,对数据库进行访问。 第二 降低面向数据的应用程序所需的代码量并减轻维护工作。当然还有其他用处,比如创建数据库等。

               第二个问题,使用EF实体框架的优势在哪里?这里要与传统三层进行一下对比。

                      传统三层特点:1 重复的操作数据库代码:使用三层架构,我们使用ADO.NET访问数据库,我们引入一个封装数据库操作的SQLHepler类,但是这里并没有减少我们D层中重复的增、删、改、查操作,这样操作不同的表就需要重复这些操作,是不是有些不尽如人意哪? 2 系统扩展性和灵活性不高:数据访问层同时与域模型和关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,都要修改D层的程序代码,增加了维护的难度和成本。

                      EF实体框架的特点:1 支持多种数据;2强劲的映射引擎,很好的支持存储过程;3  可视化操作;4 能与ASP.NET、WPF、WCF Data Services进行很好的集成;5 面向对象,不用SQL直接编码,就可以向操作对象一样操作数据库;6 提高开发效率,ORM可以自动对实体对象与数据库中Table进行字段与属性的映射,不需要单独的数据访问层; 7 方便转移,当数据库发生改变,不需要对模型进行改动,只需要修改映射关系即可。

                      俩者一对比,尤其是EF实体框架不需要单独的数据访问层,证明了EF存在的优势。EF实体框架的使用场合:1 复杂的系统 2 开发时间紧迫的项目 3 有数据库迁移需求的项目。

         三 怎么做?

                    1 EF实体框架的原理

                       EF实体框架的原理可以用一句话来表达:跟踪表实体的变化,翻译成SQL脚本,并执行到数据库中去,将实体变化映射到数据库变化。也可以用一幅图来形象的表示:

                     

                       当我们通过应用程序对数据库执行CRUD时,通过EF方式,实际上是对ObjectContext的操作,ObjectContext相当于EF的入口,ObjectContext拿到对应的CRUD消息,通过ORM中的Mapping来将对象O映射成数据库关系R,然后再生成相应的SQL语句,对数据库进行访问。

                2 EF实现方式

                        DBFirst:传统的表驱动方式创建实体数据模型(EDM),然后通过EDM生成模型和数据层代码,不仅生成实体模型和自跟踪实现模型,还支持生成轻型DbContext。

                        ModelFirst:先创建EDM,再生成DDL数据库脚本和模型和数据层代码,不仅生成实体模型和自跟踪实现模型,还支持生成轻型DbContext。

                        CodeFirst:代码先行,手动创建数据层DbContext及映射关系,通过Database.SetInitializer生成数据库,这种方式较为灵活,但是代码工作量大,手动写大量的POCO类和映射关系。

                3 数据操作    

                         查询:三种方式:原生SQL语句、Linq表达式、Lambda表达式

                                  (1)原生SQL语句:select * from table1 where <条件>;好处:适用于复杂的查询和报表 ,性能稳定。

                                  (2)Linq表达式:from 临时变量 in 集合对象或者数据库对象(实体) where  条件表达式 [order by 条件] select 临时变量中被查询的值 [group by  条件];好处:编写更少代码即可创建完整应用、更快开发错误更少的应用程序、提高开发者开发效率、数据交互方便。

                                  (3)(参数列表 ) => 表达式或者语句块,其中参数个数范围为0——N,参数类型:可以隐式或者显示定义;好处:简化了代码,增加了类型安全。

                         其他:增、删、改操作,操作过程:先创建一个数据库访问的上下文,然后实例化一个 表实体,对表实体的属性做改变,然后调用上下文的方法,进行数据库交互。例如如下的增加一个实体的操作(其他操作类似,只不过使用方法不一样。):

<span style="color:green;">//所有数据的操作第一就是创建数据库访问的上下文
<span style="color:#000000;">            SSEntities dbContext = new SSEntities();</span>

</span>#region 添加实体
            Student stu = new Student();
            stu.StudentNo = "12050242012";
            stu.StudentName = "李明";
            stu.Sex = "男";
            stu.Class = "电子二班";

            dbContext.Student.Add(stu); //代表往dbContext指向的数据中的Student表中添加一条数据stu
            dbContext.SaveChanges();   //真正的保存到数据库

#endregion
         四 扩展:

                1 IQueryable接口和其他集合的区别?

                       IQueryable接口存放查询的表达式,元素的类型,查询的驱动Provider,并不存放实际的数据。但是其他集合里面存放的是实实在在的数据。IQueryable称之为离线型集合,执行原理,Provider通过解析表达式,去数据库中查找相应数据,再返回给查询者。其他集合特指数组、List等集合,这些集合是本地集合,在内存中存放真实数据,查询直接查询内存数据。

                2 跨数据库支持?

                       目前流行的数据库基本都支持EF实体框架,例如Oracle、MySQL、SQL等。

问题

          注意问题集锦:1 日期类型不能有默认值;2 一次请求一个上下文实体;3 不能使用单例模式;4 lambda表达式和linq表达式在编译阶段后生成的IL代码(中间代码)一样。

        遇到的问题 :1 为什么dbContext不能点出objectStateManager.ChangeObjectState()的方法? 2 延迟加载具体指什么?

总结

          EF作为一个功能强大的实体框架,应该深入研究,并不能只停留在会用的层次这个时候应该讲究起来,深入研究,颗粒归仓。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 36
    评论
ORM框架是一种将对象模型与关系数据库之间进行映射技术。Entity Framework (EF)是微软的一个ORM框架,它提供了一种简化数据库访问的方式,使开发人员可以使用面向对象的方式来操作数据库。 下面是一个使用EF框架的简单示例,演示了如何创建一个数据库上下文、定义实体类、进行数据查询和插入操作[^1]: 1. 首先,安装Entity Framework NuGet包。在Visual Studio,右键点击项目,选择"Manage NuGet Packages",搜索并安装"EntityFramework"。 2. 创建一个数据库上下文类,继承自`DbContext`。在这个类,定义数据库的表对应的实体类,以及数据库连接字符串。 ```csharp using System.Data.Entity; public class MyDbContext : DbContext { public DbSet<User> Users { get; set; } public MyDbContext() : base("name=MyDbConnectionString") { } } public class User { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } ``` 3. 在应用程序使用数据库上下文进行数据操作。 ```csharp using (var context = new MyDbContext()) { // 查询数据 var users = context.Users.ToList(); // 插入数据 var newUser = new User { Name = "John", Age = 25 }; context.Users.Add(newUser); context.SaveChanges(); } ``` 这是一个简单的EF框架应用示例,通过创建数据库上下文类和实体类,可以方便地进行数据库操作。你可以根据自己的需求,进一步学习和探索EF框架的更多功能和用法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值