2012-05-05 3 views
0

私には、Document,Section、およびParagraphという3つのモデルがあります。それぞれはこのように見えます。なぜEntityは自動的に関係を完了しませんか?

// Document 
public class Document 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Section> Sections { get; set; } 
} 

// Section 
public class Section 
{ 
    public int Id { get; set; } 
    public int DocumentId { get; set; } 
    public virtual Document Document { get; set; } 
    public virtual ICollection<Paragraph> Paragraphs { get; set; } 
} 

// Paragraph 
public class Paragraph 
{ 
    public int Id { get; set; } 
    public int SectionId { get; set; } 
    public virtual Section Section { get; set; } 
} 

エンティティは自動的にすべての段落SectionId == IdSection.Paragraphsに移入されます。しかし、これは起こっていません。Document.Sectionsです。 Document.Sectionsの代わりにDocumentId == idDocument.Sectionsのすべてのセクションが入力されます。アー!

+1

これらの関係はデータベースに定義されていますか? – MrFox

+0

エンティティによって自動的に定義される必要があります。 –

+0

@dunsmoreb最初にdbを使用していて、データベースに外部キーとして定義されていない場合EFはそれらをほとんど定義しません –

答えて

0

は以下の注釈を追加します。

// Document 
public class Document 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 

    [InverseProperty("Document")] 
    public virtual ICollection<Section> Sections { get; set; } 
} 

// Section 
public class Section 
{ 
    [Key] 
    public int Id { get; set; } 
    [ForeignKey("Document")] 
    public int DocumentId { get; set; } 

    public virtual Document Document { get; set; } 

    [InverseProperty("Section")] 
    public virtual ICollection<Paragraph> Paragraphs { get; set; } 
} 

// Paragraph 
public class Paragraph 
{ 
    [Key] 
    public int Id { get; set; } 

    [ForeignKey("Section")] 
    public int SectionId { get; set; } 


    public virtual Section Section { get; set; } 
} 

を私つもりは同様にこのことを前提としている:それはどのような方法であなたを助けている場合

public class YourContext : DbContext 
{ 
    public DbSet<Document> Documents {get;set;} 
    public DbSet<Paragraph> Paragraphs {get;set;} 
    public DbSet<Section> Sections {get;set;} 
} 

は教えてください。エンティティを読み込む方法に問題がある可能性があります(インクルードを使用しますか)。

+0

これはうまくいきますが、なぜこのセクションの修正をせずに 'Section - > Paragraphs'が動作するのですか? –

+0

これは修正ではありません。これはナビゲーションの終わりをどのようにマッピングするかです。 EFは可能な限り自分自身でそれを理解しようとしますが、失敗する傾向があります。 InversePropertyでナビゲーション終了を指定した場合(1側で設定するだけで十分です)、それは見逃せません。これはどのように設定されていますか? –

関連する問題