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:配置外键的列名。
同上。。
Entity Framework Fluent API相关推荐
- Entity Framework Fluent API - Relationships
Entity Framework Fluent API - Relationships
- What’s New in Entity Framework 4? API Changes(1)(转)
If you have been working with the ADO.NET Entity Framework, you have probably been extremely eager t ...
- Entity Framework 5.0基础系列
1.Entity Framework简介 http://www.cnblogs.com/aehyok/p/3315991.html 2.Entity Framework DBFirst尝试http:/ ...
- Entity Framework 6 Recipes 2nd Edition(9-1)译-用Web Api更新单独分离的实体
第九章 在N层结构的应用程序中使用EF 不是所有的应用都能完全地写入到一个单个的过程中(就是驻留在一个单一的物理层中),实际上,在当今不断发展的网络世界,大量的应用程序的结构包含经典的表现层,应用程, ...
- 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)
在开发涉及到数据库的程序时,常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况,这时就需要进行数据库迁移. 实现数据库迁移有很多种办法,从手动管理各个版本的ddl脚本,到实现自己的mig ...
- 使用Entity Framework Core,Swagger和Postman创建ASP.NET Core Web API的分步指南
目录 介绍 背景 第1步:创建一个新项目 第2步:添加模型类 第3步:使用Entity Framework Core 第4步:添加数据库上下文和控制器 步骤5:在Package Manager控制台中 ...
- 使用Entity Framework和Web API的ASP.NET Core Blazor CRUD
目录 介绍 背景 先决条件 使用代码 第1步--创建数据库和表 第2步--创建ASP.NET Core Blazor应用程序 ASP.NET Core Blazor解决方案的新增功能是什么? 客户端项 ...
- 【配置映射】—Entity Framework实例详解
前两篇博文中的配置属性和配置关系都是配置映射,配置属性是属性的映射,配置关系式关系的映射,本篇从讲讲实体的映射. 首先,配置实体映射到表,使用ToTable方法,它接受两个参数,第一个参数是表的名称, ...
- AppBox升级进行时 - 拥抱Entity Framework的Code First开发模式
AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. 从Subsonic到Entity Framework Subsonic最早发布 ...
最新文章
- 如何优雅的编写 JavaScript 代码
- dapper封装_用了Dapper之后通篇还是SqlConnection,真的看不下去了
- POJ 1821 单调队列+dp
- Cloud Studio全文搜索功能介绍
- 使用valgrind对gperftools(tcmalloc)进行内存泄漏和越界检测
- windows bat 设置代理上网脚本bat
- ubuntu 查询cpu个数
- 搭建自己的OwnCloud私有云
- ISO 27001解读(二)风险评估
- hightopo实现电力拓扑着色功能
- 数据库读写分离下的数据同步解决方案
- 【lzy学习笔记-dive into deep learning】数学预备 2.1-2.4
- 【python-bug】日期正则表达式 unbalanced parenthesis at position 64
- python和c++同时订阅两个话题,在一个回调函数中处理
- FiveThirtyEight Comic Characters Dataset(五分之八漫画人物数据集)
- [osg]源码分析:osg::Vec3, osg::Vec3f
- C++各种经典小游戏
- PTA 天梯赛L1-079 天梯赛的善良 (20 分)
- 安装gin失败 # cd .; git clone -- https://github.com/gin-gonic/gin xcrun: error: invalid active develope
- 单反相机快门速度怎么设置
热门文章
- c md5加密 和java不一样_C#的MD5加密为什么和JAVA的加密出来的结果不一样?
- docker ubuntu安装python_BAT架构师手把手教你如何使用Docker安装GPU版本caffe2
- macos catalina cdr下载_这个开源神器可快速帮你安装 MacOS 虚拟机
- 查询 mysql所有表名
- ge linux安装apt_教你如何在 Linux 中使用 apt 命令
- Tomcat7基于Redis的Session共享
- oracle自增列问题i,Oracle序列 和 SQL SERVER 自增列的问题-oracle
- spark官方文档_Spark机器学习之Pipeline
- 嵌入式和fpga哪个好前景_二建考试选哪个专业比较好?其市场需求和就业前景如何? - 二级建造师...
- es文件浏览器怎么用_ES文件浏览器VIP直装版