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) 配置并发列