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表名");

})

 

posted @ 2016-04-20 13:56  海_洋  阅读(394)  评论(0)    收藏  举报