首页 > 代码库 > EntityFramework6.X 之 Fulent

EntityFramework6.X 之 Fulent

Fulent

Fulent是配置领域模型类的另一个方法,它比DataAnnotations提供更多的配置,提供以下三种方法映射

Mappings

To Database

Model-Wide Mapping

设置默认架构,设置经典约束

Entity Mapping

映射单个或多个表格或架构,映射复杂类型,继承策略

Property Mapping

属性、属性名、列类型、非空或非空列、列宽、列序列;并发列;外键列;配置关系

通常Fulent是在dbContext类或派生类中重写OnModelCreating方法定义,如下假设已经定义了Student领域类和Standard领域类

 技术分享

 

EntityTypeConfiguration Class

该类是一个非常重要的fluent API函数,提供了重要的方法去配置实体类和属性,通过Entity<TEntity>()方法调用

技术分享

   

Method Name

Description

HasKey<TKey>

配置实体的主键约束

HasMany<TTargetEntity>

从这个实体开始配置一个多对多的关系

HasOptional<TTargetEntity>

从这个实体配置一个可选关系,没有被关系指定的一方将可以保存到数据库中,外键可以为空

HasRequired<TTargetEntity>

从这个实体配置一个必须关系,只有在确定关系的情况下实体类型实例才能被保存到数据库,否则外键列将会空

Ignore<TProperty>

从领域模型中排除一个属性,该属性将不映射到数据库中

Map

允许高级配置该模型的数据库模型

Property<T>

配置一个已经定义的类型的结构属性

ToTable

将领域类映射到数据库中的表名

1)      将类型指定为复杂类型

按约定,没有指定主键的类型将被视为复杂类型

Eg: modelBuilder.ComplexType<Details>();

2)      指定不将CLR实体类型映射到数据库中的表

简单说就是不将实体类型映射到数据库表中

Eg: modelBuilder.Ignore<OnlineCourse>();

Entity Mappings

可设置默认的架构

 技术分享

也可将实体配置到制定表

 技术分享

将一个实体类配置到多个表中

 技术分享

技术分享

Property Mappings

 技术分享

Property用于为每个属于实体或复杂类型的属性配置特性。Property方法用于获取给定属性的配置对象。配置字符串属性是否支持Unicode内容,默认情况下,字符串为Unicode(SQLServer中的nvarchar),可以使用IsUnicode方法指定字符串应为varchar类型

Eg:modelBuilder.Entity<Department>().Property(t=>t.Name).IsUnicode(false);

先将领域类定义好

 技术分享

1)      配置主键约束和组合主键

 技术分享

2)      配置列名、类型和顺序,不仅仅可以通过方法,也可以通过HasColumnAnnotation配置

 技术分享

技术分享

3)      配置空和非空列

 技术分享

4)      配置列宽

 技术分享

5)      配置并发列

 技术分享

 

EntityFramework6.X 之 Fulent