Entity Framework Fluent API

原文:Entity Framework Fluent API

前言

使用DataAnnotation非常简单,但对于EntityFramework中的特性,就要在实体类中引入EntityFramework程序集,但实体类最好能是保持与架构无关性的POCO类,才能更具通用性。所以,最好是在数据层中使用FluentAPI在数据层中进行实体类与数据库之间的映射工作。从功能上而言Data Annotations是Fluent API的一个子集, Data Annotations可以实现的功能Fluent API都能实现。

Fluent API特性列举

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

设置属性需要在数据库操作上下文的

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }

1.HasKey - KeyAttribute:配置此实体类型的主键属性

            modelBuilder.Entity<Order>().HasKey(order => order.OrderID);

2.IsRequired - RequiredAttribute:将此属性配置为必需属性。用于存储此属性的数据库列将不可以为null

modelBuilder.Entity<Order>().HasRequired(order => order.OrderName);

3.HasMaxLength - MaxLengthAttribute:将属性配置为具有指定的最大长度

modelBuilder.Entity<Order>().Property(order => order.OrderName).HasMaxLength(30);

 4.IsConcurrencyToken - ConcurrencyCheckAttribute:将属性配置为用作开放式并发标记

modelBuilder.Entity<Order>().Property(order => order.Address).IsConcurrencyToken();

5.IsRowVersion - TimestampAttribute:将属性配置为数据库中的行版本。实际数据类型将因使用的数据库提供程序而异。将属性设置为行版本会自动将属性配置为开放式并发标记。

modelBuilder.Entity<Order>().Property(order => order.TimeStamp).IsRowVersion();//通过指定“TimeStamp”进行并发版本控制

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

6.ToTable - TableAttribute:配置此实体类型映射到的表名

modelBuilder.Entity<Order>().ToTable("Order", "Order");//指定“Order”对应表名及架构

7.HasColumnName - ColumnAttribute:配置用于存储属性的数据库列的名称

modelBuilder.Entity<Order>().Property(order => order.Note).HasColumnName("Notes").HasColumnType("ntext");//指定“Note”对应列名为“Notes”,并指定数据类型

8.HasForeignKey - ForeignKeyAttribute:将关系配置为使用在对象模型中的外键属性。如果未在对象模型中公开外键属性,则使用Map方法

modelBuilder.Entity<Order>().HasRequired(order => order.customer).WithMany().HasForeignKey(order => order.CustomerNo);

9. Ignore - NotMappedAttribute:从模型中排队某个属性,使该属性不会映射到数据库

modelBuilder.Entity<Order>().Ignore(order => order.PhotoPath);

10.HasRequired:通过此实体类型配置必需关系。除非指定此关系,否则实体类型的实例将无法保存到数据库。数据库中的外键不可为null。

modelBuilder.Entity<Order>().HasRequired(order => order.customer);

 11.Map:将关系配置为使用未在对象模型中公开的外键属性。可通过指定配置操作来自定义列和表。如果指定了空的配置操作,则约定将生成列名。如果在对象模型中公开了外键属性,则使用 HasForeignKey 方法。并非所有关系都支持在对象模型中公开外键属性。

modelBuilder.Entity<Order>().HasRequired(c => c.customer).WithMany().Map(m => m.MapKey("CustomerOrder"));

 12.MapKey:配置外键的列名。

同上。。

 

 

 

时间: 2024-07-28 17:05:32

Entity Framework Fluent API的相关文章

Entity Framework 5.0基础系列

原文:Entity Framework 5.0基础系列 1.Entity Framework简介 http://www.cnblogs.com/aehyok/p/3315991.html 2.Entity Framework DBFirst尝试http://www.cnblogs.com/aehyok/p/3318892.html 3.Entity Framework ModelFirst尝试http://www.cnblogs.com/aehyok/p/3323438.html 4.Entit

Entity Framework 实体框架的形成之旅--Code First模式中使用 Fluent API 配置(6)

在前面的随笔<Entity Framework 实体框架的形成之旅--Code First的框架设计(5)>里介绍了基于Code First模式的实体框架的经验,这种方式自动处理出来的模式是通过在实体类(POCO类)里面添加相应的特性说明来实现的,但是有时候我们可能需要考虑基于多种数据库的方式,那这种方式可能就不合适.本篇主要介绍使用 Fluent API 配置实现Code First模式的实体框架构造方式. 使用实体框架 Code First 时,默认行为是使用一组 EF 中内嵌的约定将 P

web api-MVC、WEB API 和 Entity Framework之间有什么区别?

问题描述 MVC.WEB API 和 Entity Framework之间有什么区别? MVC.WEB API 和 Entity Framework之间有什么区别 解决方案 MVC:是一个程序构架结构,m-model,v-view,c-controller web api:是一个resetful框架,asp.net webapi ef:一个orm框架,实现数据与数据实体的映射和数据维护

Entity Framework 5.0系列之EF概览

概述 在开发面向数据的软件时我们常常为了解决业务问题实体.关系和逻辑构建模型而费尽心机,ORM的产生为我们提供了一种优雅的解决方案.ADO.NET Entity Framework是.NET开发中一种由ADO.NET驱动的ORM框架,使用Entity Framework开发人员可以不必考虑数据的基础数据表和列,在处理数据时能够以更高的抽象级别进行工作,并能够以相对传统开发编写更少的代码来创建和维护应用程序. 我们知道面向对象的编程与数据存储系统的交换提出了一个难题:类结构通常同关系数据表组织结构

Entity Framework 5.0系列之自动生成Code First代码

在前面的文章中我们提到Entity Framework的"Code First"模式也同样可以基于现有数据库进行开发.今天就让我们一起看一下使用Entity Framework Power Tools如何基于现有数据库生成数据类和数据库上下等. Entity Framework Power Tools 基于现有数据库生成POCO数据类和数据库上下文需要借助Visual Studio一个扩展插件-- Entity Framework Power Tools(一个Code First反向工

Entity Framework 系统约定配置

原文:Entity Framework 系统约定配置 前言 Code First之所以能够让开发人员以一种更加高效.灵活的方式进行数据操作有一个重要的原因在于它的约定配置.现在软件开发越来越复杂,大家都试图将软件设计的越来越灵活,很多内容我们都希望是可配置的,但是过多的配置也会带来很大的工作量,解决这个问题的方法就是约定.对于一些简单的,不太可能经常变化的内容我们以一种约定的方式进行设计.使用过其他ORM框架的朋友可能知道一般ORM都有对应的映射配置文件(一般是一个Xml文件),但是EF并没有.

Entity Framework 6.1-Code First

原文:Entity Framework 6.1-Code First Code First-代码优先,先创建好领域模型.新建MyDbContext继承DbContext.根据代码自动生成数据库 Code First优点 1.可以自由的创建领域模型,基本不受EF框架的限制.自由的命名.程序员只需要关心对象间的关系.基本做到了与数据库的完全分离. 2.便于单元测试.不再使用绑定性较强的edmx文件.只使用普通的Model类 3.使用Fluent API映射可以自由的定义表名.字段名和关系.可控性强

Entity Framework 并发处理

原文http://www.cnblogs.com/Gyoung/archive/2013/01/18/2866649.html 什么是并发? 并发分悲观并发和乐观并发. 悲观并发:比如有两个用户A,B,同时登录系统修改一个文档,如果A先进入修改,则系统会把该文档锁住,B就没办法打开了,只有等A修改完,完全退出的时候B才能进入修改. 乐观并发:同上面的例子,A,B两个用户同时登录,如果A先进入修改紧跟着B也进入了.A修改文档的同时B也在修改.如果在A保存之后B再保存他的修改,此时系统检测到数据库中

Entity Framework 4.1 Code-First 学习笔记

CodeFirst提供了一种先从代码开始工作,并根据代码直接生成数据库的工作方式.Entity Framework 4.1在你的实体不派生自任何基类.不添加任何特性的时候正常的附加数据库.另外呢,实体的属性也可以添加一些标签,但这些标签不是必须的.下面是一个简单的示例: publicclass Order  { publicint OrderID { get; set; } publicstring OrderTitle { get; set; } publicstring CustomerNa