Entity Framework 入门

Entity Framework的全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框架。
  Entity Framework的主要特点:
  1. 支持多种数据库(Microsoft SQL Server, Oracle, and DB2);
  2. 强劲的映射引擎,能很好地支持存储过程;
  3. 提供Visual Studio集成工具,进行可视化操作;
  4. 能够与ASP.NET, WPF, WCF, WCF Data Services进行很好的集成。

实体映射

  实体与数据库的映射可以通过DataAnnotation与FluentAPI两种方式来进行映射:

DataAnnotation

  DataAnnotation 特性由.NET 3.5中引进,给.NET中的类提供了一种添加验证的方式。DataAnnotation由命名空间 System.ComponentModel.DataAnnotations提供。下面列举实体模型中常用的DataAnnotation特性:

  1. KeyAttribute:对应数据库中的主键
  2. RequiredAttribute:对应数据库中字段的数据是否可以为null
  3. MaxLengthAttribute:对应数据库中字符串类型字段的最大长度
  4. MinLengthAttribute:在数据库中无对应,但在代码中字符串最小长度
  5. ConcurrencyCheckAttribute:指定用于开放式并发检查的列的数据类型
  6. TimestampAttribute:将列的数据类型指定为行版本

  System.ComponentModel.DataAnnotations命名空间中只定义了部分实体验证的特性,在EntityFramework程序集中定义了更多的数据映射特性:

  1. DatabaseGeneratedAttribute:标记指定实体属性是由数据库生成的,并指定生成策略(None数据库不生成值,Identity当插入行时,数据库生成值,Computed当插入或更新行时,数据库生成值)
  2. ColumnAttribute:指定实体属性在数据库中的列名及数据类型
  3. TableAttribute:指定实体类对应的数据表名
  4. ForeignKeyAttribute:指定导航属性的外键字段
  5. NotMappedAttribute:标记指定实体属性在创建数据库中不创建对应字段
  6. ComplexTypeAttribute:标记指定实体属性是将一个对象作为另一个对象的属性,映射到数据库中则子对象表现为多个属性字段

  对于实体关系对应的数据表关系,无非“0:1,1:1,0:N,1:N,N:N”这几种,可以使用导航属性中的数据类型来表示,0…1端使用单 实体类型表示,N端使用ICollection<T>集合类型表示。对于单实体端,默认是可为空的,即为0关系,如果要设置为1关系,要使用 [Required]标签来进行标记。但对于一对一中的关系主体与依赖对象确无法做更细节的控制。

Fluent API

使用DataAnnotation非常简单,但对于EntityFramework中的特性,就要在实体类中引入EntityFramework程序集,但实体类最好能是保持与架构无关性的POCO类,才能更具通用性。所以,最好是在数据层中使用FluentAPI在数据层中进行实体类与数据库之间的映射工作。

  当然,System.ComponentModel.DataAnnotations命名空间的DataAnnotation在EntityFramework程序集中也有相应的API:

  1. HasKey - KeyAttribute:配置此实体类型的主键属性
  2. IsRequired - RequiredAttribute:将此属性配置为必需属性。用于存储此属性的数据库列将不可以为null
  3. HasMaxLength - MaxLengthAttribute:将属性配置为具有指定的最大长度
  4. IsConcurrencyToken - ConcurrencyCheckAttribute:将属性配置为用作开放式并发标记
  5. IsRowVersion - TimestampAttribute:将属性配置为数据库中的行版本。实际数据类型将因使用的数据库提供程序而异。将属性设置为行版本会自动将属性配置为开放式并发标记。

  上面这些API均无需引用EntityFramework,推荐使用DataAnnotation方式来设置映射。

  以下API的DataAnnotation特性是在EntityFramework中定义,如果也使用DataAnnotation方式来设置映射,就会给实体类增加额外的第三方程序集的依赖。所以以下API的映射推荐使用FluentAPI的方式来设置映射:

  1. ToTable - TableAttribute:配置此实体类型映射到的表名
  2. HasColumnName - ColumnAttribute:配置用于存储属性的数据库列的名称
  3. HasForeignKey - ForeignKeyAttribute:将关系配置为使用在对象模型中的外键属性。如果未在对象模型中公开外键属性,则使用Map方法
  4. Ignore - NotMappedAttribute:从模型中排队某个属性,使该属性不会映射到数据库
  5. HasRequired:通过此实体类型配置必需关系。除非指定此关系,否则实体类型的实例将无法保存到数据库。数据库中的外键不可为null。
  6. HasOptional:从此实体类型配置可选关系。实体类型的实例将能保存到数据库,而无需指定此关系。数据库中的外键可为null。
  7. HasMany:从此实体类型配置一对多关系。
  8. WithOptional:将关系配置为required:optional。(required:0…1端的1,表示必需,不可为null;optional:0…1端的0,表示可选,可为null。下同
  9. WithOptionalDependent:将关系配置为optional:optional。要配置的实体类型将成为依赖对象,且包含主体的外键。作为关系目标的实体类型将成为关系中的主体。
  10. WithOptionalPrincipal:将关系配置为optional:optional。要配置的实体类型将成为关系中的主体。作为关系目标的实体类型将成为依赖对象,且包含主体的外键。
  11. WithRequired:将关系的指定端配置为必需的,且在关系的另一端有导航属性。
  12. WithRequiredDependent:将关系配置为required:required。要配置的实体类型将成为依赖对象,且包含主体的外键。作为关系目标的实体类型将成为关系中的主体。
  13. WithRequiredPrincipal:将关系配置为required:required。要配置的实体类型将成为关系中的实体。作为关系目标的实体类型将成为依赖对象,且包含主体的外键。
  14. WillCascadeOnDelete:配置是否对关系启用级联删除。
  15. Map:将关系配置为使用未在对象模型中公开的外键属性。可通过指定配置操作来自定义列和表。如果指定了空的配置操作,则约定将生成列名。如果在对象模型中公开了外键属性,则使用 HasForeignKey 方法。并非所有关系都支持在对象模型中公开外键属性。
  16. MapKey:配置外键的列名。
  17. ToTable:配置外键列所在表的名称和架构。

  经常用到的DataAnnotation与FluentAPI列举完了,使用上还是遵守这个原则:

  如果在System.ComponentModel.DataAnnotations命名空间存在相应的标签,就使用 DataAnnotation 的方式,如果不存在,则使用 FluentAPI 的方式。

实体类映射:

  实体类映射中,关系的映射配置在关系的两端都可以配置。例如,用户信息与登录信息的 一对多 关系可以在用户信息端配置:

    HasMany(m => m.LoginLogs).WithRequired(n => n.Member);

  等效于在登录日志信息端配置:

    HasRequired(m => m.Member).WithMany(n => n.LoginLogs);

  但是,如果所有的关系映射都在作为主体的用户信息端进行配置,势必造成用户信息端配置的臃肿与职责不明。所以,为了保持各个实体类型的职责单一,实体关系推荐在关系的非主体端进行映射。

优秀的EF的文章,比如:

  1. Entity Framework Code First 学习日记
  2. 【译著】Code First :使用Entity. Framework编程
  3. Entity Framework技术系列
  4. EF框架step by step
时间: 2024-08-20 18:48:07

Entity Framework 入门的相关文章

.NET Entity Framework入门操作

Entity Framework是微软借鉴ORM思想开发自己的一个ORM框架. ORM就是将数据库表与实体对象(相当于三层中的Model类)相互映射的一种思想. 最大的优点就是非常方便的跨数据库平台.因为该技术不需要知道用的是什么数据库,这也是.net中Linq能To任何对象的原因. 这门技术为什么可以跨平台呢?是因为它只需要修改一下config文件就可以了,只要指定连接字符串,驱动程序,就可以根据不同数据库生成不同的Sql语句,当你的项目用户用到不同的数据库时,就不需要像修改SQL语句了. E

Entity Framework入门

最近对项目中应用的技术进行学习,学到Entity Framework这部分内容,马上被EF的魅力深深吸引了.现在开发者越来越关注如何加快开发效率,而EF无疑是值得我们开发者去学习的,它实际上是微软的ADO.NET的增强版本,是一个ORM框架.接下来就给大家简单介绍一下EF. 一.EF简单介绍 EF是一种ORM-对象关系映射(Object-RelationalMapping)框架,能够跟踪实体的变化,把我们在编程是使用的对象映射到底层的数据库结构. ORM--广义上说,指的是面对对象的对象模型和关

3、ASP.NET MVC入门到精通——Entity Framework增删改查

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 这里我接上讲Entity Framework入门.从网上下载Northwind数据库,新建一个控制台程序,然后重新添加一个ado.net实体数据模型. EF中操作数据库的"网关"(操作上下文) DBContext封装 .NET Fra

Entity Framework增删改查

这里我接上讲Entity Framework入门.从网上下载Northwind数据库,新建一个控制台程序,然后重新添加一个ado.net实体数据模型. EF中操作数据库的"网关"(操作上下文) DBContext封装 .NET Framework 和数据库之间的连接.此类用作“创建”.“读取”.“更新”和“删除”操作的网关.DBContext 类为主类,用于与作为对象(这些对象为 EDM 中定义的实体类型的实例)的数据进行交互.DBContext 类的实例封装以下内容: 到数据库的连接

Entity Framework系列教程汇总

阅读目录 一.EntityFramewoke入门教程系列 二.EF CodeFirst系列 翻译自http://www.entityframeworktutorial.net/,使用EF几年时间了,一直没有系统总结过,所以翻译这一系统文章作为总结,由于英语功底有限,翻译的可能有些问题,欢迎指正. 回到顶部 一.EntityFramewoke入门教程系列 Entity Framework入门教程(1)---Entity Framework简介 Entity Framework入门教程(2)---E

Entity Framework快速入门--IQueryable与IEnumberable的区别

IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IQueryable 接口 它继承 IEnumerable 接口,而因为.net版本加入Linq和IQueryable后,使得IEnumerable不再那么单调,变得更加强大和丰富. 为了区别两个接口,我们通过一个实际的例子来解释一下. 根据上篇随笔的实例,编写如下代码: static void Main( string []

ASP.NET MVC 5 + EF 6 入门教程 (5) Model和Entity Framework

文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-ef-6-get-started-model.html 上一节:ASP.NET MVC 5 入门教程 (4) View和ViewBag 源码下载:点我下载 MVC中的Model是用来给View提供显示数据的对象. 这里我们首先创建一个Model对象. 在解决方案资源管理器中右键点击Models文件夹,选择添加->类.添加一个名为Employee.cs的Model类.Models文件夹

ASP.NET MVC5 + EF6 入门教程 (5) Model和Entity Framework

文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-ef-6-get-started-model.html 上一节:ASP.NET MVC 5 入门教程 (4) View和ViewBag 源码下载:点我下载 一.创建Model MVC中的Model是用来给View提供显示数据的对象. 这里我们首先创建一个Model对象. 在解决方案资源管理器中右键点击Models文件夹,选择添加->类.添加一个名为Employee.cs的Model类

[EF1]POCOs(Plain Old C# Object)Entity Framework 4.x: POCOs入门

原文链接:http://www.cnblogs.com/hjzhang/archive/2011/05/18/2050530.html POCOs 是在Visual Studio 2010和ASP.NET 4.0中开始支持的一个新特性,其入门十分简单,下面我们基于Entity Framework 4.0.来实现一个基于POCOs的代码示例. 首先,创建一个测试工程 然后,新建一个Ado.NET Entity Data Model文件 如下图所示,定义两个类:Albums 和Photos 接下来我