EF Fluent API上
什么是Fluent API?
官方答案:EF 中内嵌的约定将 POCO 类映射到表。但是,有时您无法或不想遵守这些约定,需要将实体映射到约定指示外的其他对象,所以Fluent API和注解都是一种方法,这两种方法是用来配置EF,在映射属性时绕开约定。详情参考(https://msdn.microsoft.com/zh-cn/data/jj591617)
如何访问Fluent API?
通过自定义类(继承自DbContext )的OnModelCreating方法访问。
属性映射
主要配置:主键、数值长度、配置为必须、不映射,外键等
配置主键:
modelBuilder.Entity<ClassA>().HasKey(t => t.ID); //配置ClassA的ID属性为主键
配置联合主键:
modelBuilder.Entity<ClassA>().HasKey(t => new { t.ID, t.Name }); //配置ClassA的ID和Name为主键
设置数据非数据库生成:
modelBuilder.Entity<ClassA>().Property(t => t.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); //ClassA的Id属性不用数据库控制生成
设置字段最大长度:
modelBuilder.Entity<ClassA>().Property(t => t.Name).HasMaxLength(); //设置ClassA类的Name属性的最大长度为100,如果值长度100,会抛出 DbEntityValidationException异常
设置字段为必需:
modelBuilder.Entity<ClassA>().Property(t =>t.Id).IsRequired(); //设置ClassA类的Id属性为必需
属性不映射到数据库:
modelBuilder.Entity<ClassA>().Ignore(t => t.A); //调过ClassA类的A属性,让之不映射到数据库中
将属性映射到数据库中特定列名:
modelBuilder.Entity<ClassA>()
.Property(t => t.A)
.HasColumnName("A_a"); //将类ClassA的属性A映射到数据库中对应列名A_a
类中不指定外键,但在数据库中指定外键名:
modelBuilder.Entity<Staff>()
.HasRequired(c => c.Department)
.WithMany(t => t.Staffs)
.Map(m => m.MapKey("DepartmentID")); //指定员工表中DepartmentID为Staff到Department的外键
指定属性映射的字段为Unicode类型:
modelBuilder.Entity<ClassA>()
.Property(t => t.Name)
.IsUnicode(true);
设置属性映射的列的类型:
modelBuilder.Entity<Department>()
.Property(p => p.Name)
.HasColumnType("varchar"); //设置列为varchar类型
设置复杂类型的属性(何为复杂类型? 没指定主键的类型):
modelBuilder.ComplexType<Details>()
.Property(t => t.Location)
.HasMaxLength();
modelBuilder.Entity<OnsiteCourse>()
.Property(t => t.Details.Location)
.HasMaxLength();
显示设定为复杂类型:
modelBuilder.ComplexType<ClassA>();
将属性配置为用作乐观并发令牌:
方法1、用 ConcurrencyCheck 特性或 IsConcurrencyToken 方法
modelBuilder.Entity<OfficeAssignment>()
.Property(t => t.Timestamp)
.IsConcurrencyToken();
方法2、IsRowVersion
modelBuilder.Entity<OfficeAssignment>()
.Property(t => t.Timestamp)
.IsRowVersion();
忽略类型,不映射到数据库中:
modelBuilder.Ignore<OnlineCourse>();
EF Fluent API上的更多相关文章
- EF Fluent API
EntityTypeConfiguration 它可以为一个实体类,配置一个模型. Entity Framework 6 一次加载许多个 Fluent API 映射 如果对于许多实体有大量映射,则 O ...
- Repository模式--采用EF Fluent API使用EntityTypeConfiguration分文件配置Model映射关系
EF中类EntityTypeConfiguration是一个很有用的类,在nopCommerence中就使用这个类来分文件分文件配置Model映射关系.今天我就来谈谈Repository模式在Enti ...
- EF fluent API如何配置主键不自动增长
在Dbcontext中作如下添加: protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilde ...
- EF Core Fluent API
多对多配置 先安装 Install-Package MySql.Data.EntityFrameworkCore 创建3个表 创建类 public class Role { public long I ...
- 10.翻译系列:EF 6中的Fluent API配置【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/fluent-api-in-code-first.aspx EF 6 Code-Firs ...
- 使用 Fluent API 配置/映射属性和类型(摘自微软Data Access and Storage)
使用 Fluent API 配置/映射属性和类型 使用实体框架 Code First 时,默认行为是使用一组 EF 中内嵌的约定将 POCO 类映射到表.但是,有时您无法或不想遵守这些约定,需要将实体 ...
- 使用 Fluent API 配置/映射属性和类型
使用 Fluent API 配置/映射属性和类型 使用实体框架 Code First 时,默认行为是使用一组 EF 中内嵌的约定将 POCO 类映射到表.但是,有时您无法或不想遵守这些约定,需要将实体 ...
- 1.【使用EF Code-First方式和Fluent API来探讨EF中的关系】
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/relationship-in-entity-framework-using-code-firs ...
- EF里的默认映射以及如何使用Data Annotations和Fluent API配置数据库的映射
I.EF里的默认映射 上篇文章演示的通过定义实体类就可以自动生成数据库,并且EF自动设置了数据库的主键.外键以及表名和字段的类型等,这就是EF里的默认映射.具体分为: 数据库映射:Code First ...
随机推荐
- 拥抱.NET Core,学习.NET Core的基础知识补遗
前言 .NET Core的新特性之一就是跨平台,但由于对之前框架的兼容导致编写一个.NET Core类库变得相当复杂,主要体现为相当多的框架目标和支持平台,今天我们就对.NET Core的跨平台特性进 ...
- Python黑帽编程2.9 面向对象编程
Python黑帽编程2.9 面向对象编程 我个人认为,计算机语言的发展,有两个方向,一个是从低到高的发展过程,在这个过程中,语言的思考和解决问题的方式是面向硬件的.硬件本质上处理的是信号,在此基础上, ...
- ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘
开篇:经历了上一篇<aspx与服务器控件探秘>后,我们了解了aspx和服务器控件背后的故事.这篇我们开始走进WebForm状态保持的一大法宝—ViewState,对其刨根究底一下.然后,再 ...
- 程序猿尤其是.NET程序员所需要注意的网站资源
我觉得一个程序员 需要 对 技术 和 行业 两方面同时具有极大热情和注意力才能让自己在一个新的台阶. 有些程序员就是对技术有着极大的热情但是行业完全不注意,这样我感觉只能成为一个专家,并不能让自己真正 ...
- 如何理解T-SQL中Merge语句
写在前面的话:之前看过Merge语句,感觉没什么用,完全可以用其他的方式来替代,最近又看了看Merge语句,确实挺好用,可以少写很多代码,看起来也很紧凑,当然也有别的优点. ====正文开始===== ...
- Copy 与MutableCopy的区别
NSString *string = @"origion"; NSString *stringCopy = [string copy]; NSMutableString *stri ...
- Android开发学习之路-Android6.0运行时权限
在Android6.0以后开始,对于部分敏感的“危险”权限,需要在应用运行时向用户申请,只有用户允许的情况下这个权限才会被授予给应用.这对于用户来说,无疑是一个提升安全性的做法.那么对于开发者,应该怎 ...
- 2013 duilib入门简明教程 -- 自绘标题栏(5)
如果大家有做过标题栏的自绘,肯定会感慨各种不容易,并且现有的一些资料虽然完美的实现了功能,但是代码比较乱,需要自行整理.如果用duilib,就是小case啦. duilib其实并没有区 ...
- VMWare vSphere Client 克隆虚拟机 更改IP
克隆虚拟机后,查看该虚拟机所分配的MAC地址. 打开控制台,进入linux界面. 打开/etc/udev/rules.d/70-persistent-net.rules内容如下面例子所示: # vi ...
- 【WP开发】JSON数据的读与写
在不使用其他库的情况下,WP-RT应用中也可以处理JSON数据.主要的几个类都放到Windows.Data.Json命名空间中: IJsonValue接口作为用于封装JSON数据的规范,其中只读属性V ...