大家好,我有一个关于EF Fluent API(代码优先: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上的数据库中,我有一列(FK)引用TABLE_a的PK。
如果使用的列不是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);
}
TABLE_B
的Id
也是TABLE_A
的FK。