我有一个项目类,其中包含:
int ProjectID;
string ProjectName;
List<Item> Items;
我有一个包含以下内容的项目类:
int ItemID;
int? ParentID; // ID of Parent Item
string ItemName;
List<Item> Items;
我希望我的Items Table包含以下列:
ItemID, ParentID, ItemName
但出于某种原因,它正在添加另一列ItemItemID
。
我尝试了一些流畅的API。 (WithOptional,MapKey等......)但我找不到适合我的东西。我认为问题是ParentID
不被视为项目的关系。
请告诉我一个解决方案,因为我已经困住了几个小时......
答案 0 :(得分:0)
实体框架无法推断ParentID
属性实际上是同一个表中父Item
个对象的外键,因此决定在数据库中为该属性创建一个特殊列。您必须使用ForeignKey属性告诉ParentID
实际上是外键。
将Item
类的定义更改为以下内容:
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
属性需要指向显示父实体的属性。
如果您更喜欢使用Fluent API,则删除ForeignKey属性,并将上下文类中的OnModelCreating
方法覆盖为以下内容:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder
.Entity<Item>()
.HasMany(e => e.Items)
.WithOptional(e => e.Parent)
.HasForeignKey(e => e.ParentID);
}