如何在實體框架5中映射以下關係?實體框架5代碼優先自引用關係
public class Item {
public int Id { get; set; }
public int? ParentItemId { get; set; }
public string Value { get; set; }
public Item ParentItem { get; set; }
public List<Item> ChildItems { get; set; }
}
我已經試過這樣:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Item>()
.HasOptional(i => i.ParentItem)
.WithMany(i => i.ChildItems)
.HasForeignKey(i => i.ParentItemId);
}
這:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Item>()
.HasMany(i => i.ChildItems)
.WithOptional(i => i.ParentItem)
.HasForeignKey(i => i.ParentItemId);
}
即:在這個錯誤的結果:
在從屬類型的所有屬性參照約束的作用必須與Pri中相應的屬性類型相同首席角色。
如果我開始使用數據庫第一映射,這裏是生成的實體是什麼樣子:
public partial class Item
{
public Item()
{
this.ChildItems = new HashSet<Item>();
}
public int Id { get; set; }
public Nullable<int> ParentItemId { get; set; }
public string Value { get; set; }
public virtual ICollection<Item> ChildItems { get; set; }
public virtual Item ParentItem { get; set; }
}
我知道如果我開始與這個將工作DB-第一,我只需要知道如何在代碼優先中定義關係。
是'Id'關鍵特性?或者你有一個鍵映射(與Fluent API?)到另一個屬性,例如「Value」? – Slauma
Id是Item的主鍵屬性。 – user326502
「* Dependent Role *中所有屬性的類型」是指'ParentItemId'並且類型爲'int?'的FK屬性的類型。 「*主體角色*中的相應屬性類型」表示屬性爲「Id」且類型爲「int」的PK屬性的類型。它們是相同的(可空性無關緊要)。但是,例外說,他們不是。如果你有例如PK的long(或其他類型)和FK的'int?',就會發生異常。相當奇怪...... – Slauma