3

私はそれを持つCategoryことができますRootCategory。問題は、RootCategoryID正しく設定されていないことです。代わりにCategory_ID、モデルで作成していないデータベースに作成されています。

getちなみに、RootCategoryで変更を加えていない場合は、期待どおりにすべてがマップされます。しかし、それRootCategoryは常にnullです(彼はそれをどこから取得するかを知りません)

モデル

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

nav プロパティを手動で読み込む必要はありません。EFRootCategoryが自動的に行います。ただし、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 に答える