EF学习记录
fluent API一些规则
with三个方法
WithRequired:a.WithRequired(b=>b.a)B中必须包含一个不为空的A类实例
WithOptional:表示B中可以包含一个为空的A类实例
WithMany:表示B中包含A类实例集合
has的三个方法
HasMany:a.HasMany(a=>a.bs)a中包含b实例集合
HasRequired:a中包含一个不为空的B类实例
HasOptional:a中包含一个可为空的B类实例
设置外键
this.HasMany(a=>a.bs).WithRequired(b=>b.a).Map(o=>MapKey("aId"))
a对b一对多,b对a一对一,b中外键aId
EF默认开启级联删除(如果有一对多的关系时)
.Map(o=>o.aId).WillCascadeOnDelete(false)
关闭级联删除
多对多关系
a.HasMany(a=>a.bs).WithMany(b=>b.as)
.Map(r=>{
r.ToTable("ab");
r.MapLeftKey("a.Id");
r.MapRightKey("b.Id");
})
一对一
WithOptionalDependent():在a中有外键指向B的主键
WithOptionalPrincipal():在B中有外键指向A的主键
(WithRequired和WithOptional据可,区别为外键关系是否可为空)
映射继承关系
(TPH,TPT,TPC)三种处理方法
TPH:Map<子类一>(a=>{a.Requires("列名").HasValue(类型和值)} 如:"AAA"。就是nvarchar(max)类型,值为AAA
TPT:Map<子类>(a=>{a.ToTable("表名");})
TPC:Map<子类>(a=>{a.ToTable("表名");a.MapInheritedProperties();}); MapInheritedProperties强制Code First使用TPC
多表合并成一个类,多类合并成一个表
类合并成表
映射时:ToTable()指向同一张表,主键名一致。
一类映射多表
Map(a=>{
a.Properties(c=>new{c.a列,c.b列});
a.ToTable("a表名");
]);
Map(a=>{
a.Properties(c=>new{c.b列,c.d列});
a.ToTable("b表名");
})