在忙碌中渡过了5,6,7 月份,现在些抽点时间对Entity Framework的使用做一些基础的回忆。
Entity Framework 是什么?
Entity Framework(EF)和我们所熟悉的ADO.NET差不多,都提供对数据库访问和操作的对象,不过各自也有所不同之处。
ADO.NET提供了一套对底层数据库操作的对象模型,抽象层次较底,操作效率和性能较高,是日常开发中访问数据库常用方式。
EF的抽象层次较高:它把数据库映射为DbContext,把数据库对象都转换成应用程序对象 (entity),而数据字段都转换为属性 (property),关系则转换为结合属性 (association)。在系统开发上提升了不少效率,使用EF能很容易提升易维护,易扩展的系统。
EF 同时也支持 Linq , Lambda 编写查询等相关数据库操作,不需要懂SQL语法也能熟练操作数据库。
因为EF把数据库对象都转换成实体对象存储在内存中,所以EF在使用过程中是比较占内存。加上抽象层次较高在访问底层数据库模型需做转换,在数据库操作性能上一般没ADO.NET高。这是在享用EF的弊端。
EF在项目中主要是一个:*.edmx文件。EF 主要分为三层:
(1)概念模型(Conceptual Model):主要体现为一组可以被应用程序直接使用的类。这些类也是我们在程序中直接使用的类,通常称之为“实体(Entity)”
(2)存储模型(Storage Model):主要体现为一组与底层数据存储介质(比如数据库系统)直接对应的类。
(3)概念-存储模型映射(Conceptual- Storage Mapping),解决“概念模型”中的类如何与“存储模型”中的类相互对应的问题。
Entity Framework 创建
1.在VS2012创建EF文件,并选择Database First开发模式。、
2.配置EF所需连接的数据库。
3.配置完成后我们可以看到EF的真面目。左边展示为:数据库对应表的映射内容。
4.在左边空白处右键-->"映射详细信息"可以查询数据库映射表的详细内容可做相应修改, “模型浏览器”可以查询到EF的三层结构:概念模型,概念-存储模型映射,存储模型。
Entity Framework 使用CRUD
1. 增加数据
WebSiteDBEntities entity = new WebSiteDBEntities();
Users user = new Users() { Account = "9245162", Code = "10003", Pwd = "123456", Isadmin = true }; entity.Users.Add(user); entity.SaveChanges();
执行结果:
2.查询数据
//Linq 查询 var Query_User_TO_Linq = from c in entity.Users where c.Account == "9245162" select c; foreach (var Users in Query_User_TO_Linq) Console.WriteLine("Linq 查询结果:帐号:{0},编码:{1}", user.Account, user.Code); //Lambda 查询 var Query_User_TO_Lambda = entity.Users.Where(c => c.Account == "9245162").ToList(); foreach (var Users in Query_User_TO_Lambda) Console.WriteLine("Lambda 查询结果:帐号:{0},编码:{1}", user.Account, user.Code);
//SQL 查询 var Query_User_TO_SQL = entity.Users.SqlQuery("Select * from Users Where Account='9245162' ").ToList(); foreach (var Users in Query_User_TO_SQL) Console.WriteLine("SQL 查询:帐号:{0},编码:{1}", user.Account, user.Code);
执行结果:
3.修改数据
Users uuser = entity.Users.First(c => c.Code == "10003"); uuser.Account = "CK9245162"; entity.Users.Attach(user); entity.Entry(uuser).State = System.Data.EntityState.Modified; entity.SaveChanges();
4.删除数据
Users duser = entity.Users.First(c => c.Account == "9245162"); entity.Users.Remove(duser); entity.SaveChanges();
Entity Framework 三种开发模式
DataBase First: 传统的表驱动方式创建edm,然后通过edm生成模型和数据层代码。
Model First : 先创建edm模型,再生成DDL数据库脚本和模型和数据层代码。
Code First : 手动创建POCO模型,数据层DbContext及映射关系,通过Database.SetInitializer生成数据库,这种方式较灵活,但是代码工作较多。