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);
}
我有一个项目 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);
}