Entity Framework 创建不需要的列

Entity Framework creating unwanted column

我有一个项目 class 其中包含:

int ProjectID;
string ProjectName;
List<Item> Items;

我有一个项目 class,其中包含:

int ItemID;
int? ParentID; // ID of Parent Item
string ItemName;
List<Item> Items;

我希望我的项目 Table 包含以下列: ItemID, ParentID, ItemName

但出于某种原因,它正在添加另一列 ItemItemID

我已经尝试过一些流利的东西 API。 (WithOptional、MapKey 等...)但我找不到适合我的东西。我认为问题在于 ParentID 未被视为项目的关系。

请给我一个解决方案,因为我已经卡了几个小时了...

Entity Framework 无法推断 ParentID 属性 实际上是同一个 table 中父对象 Item 的外键,所以它决定在数据库中为此创建一个特殊列。您必须使用 ForeignKey 属性告诉它 ParentID 实际上是一个外键。

Item class 的定义更改为如下内容:

public class Item
{
    public Item()
    {
        Items = new HashSet<Item>();
    }

    public int ItemID { get; set; }
    [ForeignKey("Parent")]
    public int? ParentID { get; set; } // ID of Parent Item
    public string ItemName { get; set; }
    public virtual ICollection<Item> Items { get; set; }
    public virtual Item Parent { get; set; }
}

请注意我是如何添加 public virtual Item Parent 属性 的,因为 ForeignKey 属性需要指向表示父实体的 属性。

如果您更喜欢使用流畅的 API,则删除 ForeignKey 属性,并将上下文 class 上的 OnModelCreating 方法重写为如下内容:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder
        .Entity<Item>()
        .HasMany(e => e.Items)
        .WithOptional(e => e.Parent)
        .HasForeignKey(e => e.ParentID);
}