6

Entity Framework 4.1のコードを最初に使用していますが、ASP.NET MVC 3を使用しています。自己参照設定を正しく行うために苦労しています。私はCategoryクラスを持っています。自分自身を自己参照する必要があります。テーブルのParentCategoryIdがnullの場合、カテゴリは親カテゴリになります。カテゴリに値を持つParentCategoryIdがある場合は、そのカテゴリが親カテゴリに属する​​ことを意味します。Entity Framework 4.1自己参照データの取得

コードプロジェクトのarticleに続きました。ここで

は私のCategoryクラスである:

public class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public string MetaKeywords { get; set; } 
    public string MetaDescription { get; set; } 
    public bool IsActive { get; set; } 
    public virtual Category ParentCategory { get; set; } 
    public int? ParentCategoryId { get; set; } 
} 

私のコンテキストクラス:

public class PbeContext : DbContext 
{ 
    public DbSet<Category> Categories { get; set; } 

    protected override void OnModelCreating(DbModelBuilder dbModelBuilder) 
    { 
      dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 

      dbModelBuilder.Entity<Category>() 
       .HasOptional(c => c.ParentCategory) 
       .WithMany() 
       .HasForeignKey(p => p.ParentCategoryId); 
    } 
} 

ない上記が正しいかどうか確認してください?

誰かが私にこの権利を手伝ってもらえますか?私が必要とするのは、idでカテゴリをクエリすると、親カテゴリを返す必要があるということです(必要なときにのみロードされます)。また、子カテゴリをロードする必要があります(必要な場合のみ)。私はまだ子カテゴリのカテゴリクラスにリストを追加していません。

親カテゴリと子カテゴリを持つカテゴリを取得するには、上記のクエリはどのように見えますか?

EDIT

これは私が私のカテゴリ検索方法です:

public Category GetById(int id) 
{ 
    return db 
      .Categories 
      .Find(id); 
} 

ParentCategory参照がnullになる可能性があるためには、どのように私はこれはビューに表示されますか?私は以下を持っています:

@Model.ParentCategory.Name 

..しかし、カテゴリーに親カテゴリーが関連付けられていないとエラーにはなりませんか?それをビューにどのように表示しますか?あなたは子カテゴリにアクセスする必要がある場合

答えて

7

あなたのモデル

public class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public string MetaKeywords { get; set; } 
    public string MetaDescription { get; set; } 
    public bool IsActive { get; set; } 
    public virtual Category ParentCategory { get; set; } 
    public int? ParentCategoryId { get; set; } 
    public virtual ICollection<Category> ChildCategories{ get; set; } 
} 
その後

することができますセットアップが

 dbModelBuilder.Entity<Category>() 
      .HasOptional(c => c.ParentCategory) 
      .WithMany(c => ChildCategories) 
      .HasForeignKey(p => p.ParentCategoryId); 

などのモデルを編集

あなたがすべきにコレクションプロパティを追加することができますParentCategoryがヌルかどうかを確認してください。

@if(Model.ParentCategory != null){ 
    <div>@Model.ParentCategory.Name</div> 
} 
+0

ありがとうございました。データを取得するためにクエリがどのように見えますか? –

+0

私の編集した記事をご覧ください:) –

+0

@Brendan編集の回答 – Eranga

関連する問題