3

我有Category那个可以有RootCategory。问题是它没有RootCategoryID正确设置,而是Category_ID在我什至没有在我的模型中创建的数据库中创建。

顺便说一句,如果我没有get在 RootCategory 上进行修改,它会像我期望的那样映射所有内容。但是 thenRootCategory总是为空(他不知道从哪里得到它)

模型

public class Category
{
    public int ID { get; set; }
    // Tried [ForeignKey("RootCategoryID")]
    public Category RootCategory {
        get
        {
            ORDataContext _db = new ORDataContext();
            return _db.Categories.Where(x => x.ID == this.RootCategoryID).SingleOrDefault();
        }
    }
    public int? RootCategoryID { get; set; } // This does not set itself properly

    public ICollection<Category> ChildCategories { get; set; }
}

生成数据库后update-database

-ID
-RootCategoryID (that I have created, but it's not used)
-Category_ID (taht EF created for me, that I don't want)
4

1 回答 1

4

您不需要RootCategory像您一样手动加载 nav 属性,EF 会自动完成。但是,EF 无法推断出您想要的内容,您应该使用数据注释显式映射它:

   public class Category
   {
      public int ID { get; set; }

      public virtual Category RootCategory { get; set; }
      [ForeignKey("RootCategory")]
      public int? RootCategoryID { get; set; } // This does not set itself properly

      public virtual ICollection<Category> ChildCategories { get; set; }    

   }

或通过流利的:

  protected override void OnModelCreating( DbModelBuilder modelBuilder )
  {
     modelBuilder.Entity<Category>()
        .HasMany( c => c.ChildCategories )
        .WithOptional( ca => ca.RootCategory )
        .HasForeignKey( c => c.RootCategoryID );
  }

你所有的属性/收藏都应该可以工作。

于 2012-09-30T18:40:04.573 回答