我有这个实体:
public abstract class DataField
{
[Key]
public Guid Id { get; set; }
public virtual ICollection<DataField> Referals { get; set; }
public virtual ICollection<DataField> Encapsulated { get; set; }
}
这张地图:
public class DataFieldMapping : EntityTypeConfiguration<DataField>
{
public DataFieldMapping()
{
HasMany(x => x.Referals).WithMany(x => x.Encapsulated);
HasMany(x => x.Encapsulated).WithMany(x => x.Referals);
ToTable("DataField");
}
}
关键是DataField可以有许多封装的DataField,并且本身可以被许多其他DataField封装/引用。
我不确定是否需要两条HasMany线。但...
当我运行创建两个DataField的测试时,一个引用另一个,另一个被第一个封装,我收到此错误:
无效的对象名称'dbo.DataFieldDataFields'。
我认为有必要在单独的表中存储多对多关系。所以我想如果我用正确的列创建一个名为DataFieldDataFields的表,事情就会奏效。但有没有办法告诉EF这个表被称为除DataFieldDataFields之外的其他东西?
编辑:我现在创建了该表,它可以正常工作。但EF希望该表的列名为DataField_Id和DataField_Id1。同样的问题:有没有办法告诉EF这些列的名称和表本身的名称,如果我想要将列和表命名为其他东西?
答案 0 :(得分:1)
原来很简单:
HasMany(x => x.Referals).WithMany(x => x.Encapsulated).Map(c =>
{
c.ToTable("DataFieldJoin");
c.MapLeftKey("RefId");
c.MapRightKey("EncapId");
});