我将如何映射实体框架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); }
这都导致了这个错误:
引用约束的从属角色中的所有属性的类型必须与主体角色中相应的属性类型相同.
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-first开始,我将需要知道如何以代码优先定义关系.