大家好我对EF Fluent API(Code First:P)有疑问。在我的模型中我有
public class TABLE_A
{
public virtual long Id {get; set;}
....
public virtual TABLE_B MyTableBRef {get; set;}
}
public class TABLE_B
{
public virtual long Id {get; set;}
....
public virtual TABLE_A MyTableARef {get; set;}
}
我应该如何将0..1映射到0..1关系?
在TABLE_B上的数据库中,我有一个引用TABLE_A的PK的列(FK)。
答案 0 :(得分:0)
如果您使用的是TABLE_B
PK以外的列,则无法在双方都拥有导航属性。
public class TABLE_A
{
public virtual long Id {get; set;}
}
public class TABLE_B
{
public virtual long Id {get; set;}
....
public virutal TABLE_A MyTableARef {get; set;}
}
public class MyContext : DbContext
{
public DbSet<TABLE_A> As { get; set; }
public DbSet<TABLE_B> Bs { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<TABLE_B>()
.HasRequired(b => b.MyTableARef)
.WithMany()
.Map(b => b.MapKey("FK_Column_name));
}
}
如果TABLE_B
的PK也是TABLE_A
的FK,那么您可以使用双方都具有导航属性的共享PK映射。
修改强>
您可以按如下方式使用共享PK映射
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<TABLE_B>()
.HasRequired(b => b.MyTableARef)
.WithOptional(a => a.MyTableBRef);
}
Id
的{{1}}也是TABLE_B
的FK。