实体框架(Entity Framework)
实体框架(Entity Framework)简介
ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,早期被称为 ObjectSpace,最新版本是EF6.0【CodeOnly功能得到了更好的支持】
实体框架Entity Framework 是 ADO.NET 中的一组支持开发面向数据的软件应用程序的技术。是微软的一个ORM框架。
EF插入实体
步骤:定义要插入实体的变量,并依次赋值,然后交给数据库访问上下文进行管理,最后保存回数据库。
1 //定义 访问数据库的 上下文 2 3 DemoEntities demoEntities = new DemoEntities(); 4 5 Product product = new Product();//定义实体 6 7 product.ProductName = "spring4G"; 8 9 product.SubTime = DateTime.Now; 10 11 demoEntities.Product.AddObject(product);//加入上下午进行跟踪 12 13 demoEntities.SaveChanges();//保存回数据库
Linq To EF
简单查询:var result = from c in Entities.Product select c;
条件查询:
普通linq写法: var result = from c in Entities.Product where c.Gender ==‘w’ select c;
Lambda表达式写法:var result = from c in Entities.Customer.Where<Customer>(c =>c.Gender==‘w’);
排序分页写法: IQueryable<Customers> cust10 = (from c in customers UnitPrice = d.UnitPrice OrderId = order.OrderID,ProductId = d.ProductID,};
EF修改删除
修改操作只需要直接修改表实体的属性,然后调用SaveChange方法就可以了。
删除需要调用上下文的Remove()方法
1 DemoEntities demoEntities = new DemoEntities(); 2 3 var products = from c in demoEntities.Product 4 5 where c.ProductId == 1 6 7 select c; 8 9 var pro = products.FirstOrDefault<Product>(); 10 11 pro.ProductName = "hello c"; 12 13 demoEntities.SaveChanges();
追踪EF生成的SQL脚本方法
EF生成脚本最终由数据库执行,而截获SQL脚本最方便的就是使用SqlServer的Profile监测工具,不仅可以进行Sql脚本的监控而且可以监控脚本占用的CPU、脚本执行时间等
使用方法:Management Studio→工具→SqlServer Profile 然后登陆后就可以监控当前的sqlserver执行的SQL脚本
ORM in EF
Entity Framework 利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity),而数据字段都转换为属性 (property),关系则转换为结合属性 (association),让数据库的 E/R 模型完全的转成对象模型,如此让程序设计师能用最熟悉的编程语言来调用访问。而在抽象化的结构之下,则是高度集成与对应结构的概念层、对应层和储存层,以 及支持 Entity Framework 的数据提供者 (provider),让数据访问的工作得以顺利与完整的进行。
(1) 概念层:负责向上的对象与属性显露与访问。
(2) 对应层:将上方的概念层和底下的储存层的数据结构对应在一起。
(3) 储存层:依不同数据库与数据结构,而显露出实体的数据结构体,和 Provider 一起,负责实际对数据库的访问和 SQL 的产生。
在EF中的实体数据模型(EDM)由以下三种模型和具有相应文件扩展名的映射文件进行定义。
· 概念架构定义语言文件 (.csdl) -- 定义概念模型。
· 存储架构定义语言文件 (.ssdl) -- 定义存储模型
· 映射规范语言文件 (.msl) -- 定义存储模型与概念模型之间的映射M。
实体框架 使用这些基于 XML 的模型和映射文件将对概念模型中的实体和关系的创建、读取、更新和删除操作转换为数据源中的等效操作。EDM 甚至支持将概念模型中的实体映射到数据源中的存储过程。