2

我有这个实体:

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 这些列的名称和表本身的名称?

4

1 回答 1

1

结果很简单:

        HasMany(x => x.Referals).WithMany(x => x.Encapsulated).Map(c =>
            {
                c.ToTable("DataFieldJoin");
                c.MapLeftKey("RefId");
                c.MapRightKey("EncapId");
            });
于 2013-06-11T12:02:25.377 回答