2017-03-07 10 views
0

が動作していない、私はClassDefinitionEntityクラスを持っています:Entity Frameworkの6.0一つは、私が最初のコードと1つの側では、多くの関係</p> <p>に1を実装するための流暢APIとEntity Frameworkのを使用しようと

public class ClassDefinitionEntity{ 

    public string LocalClassIsin { get; set; } 
    public ICollection<PcfPublishingDefinitionEntity> PublishingDefinitions { get; set; } 

    public ClassDefinitionEntity() 
    { 
     PublishingDefinitions = new List<PcfPublishingDefinitionEntity>(); 
    } 
} 

そして、多くの側のPcfPublishingDefinitionEntityクラス:

public class PcfPublishingDefinitionEntity 
{ 
    public int ClassId { get; set; } 
    public ClassDefinitionEntity ClassDefinition { get; set;} 
    public PcfFormatEnum Format { get; set; } 
    public PcfPublishingChannelEnum Channel { get; set; } 
} 

OnModelCreatingのコードは、このようなものですので、私の列名は、エンティティの規則に従わない:

protected override void OnModelCreating(DbModelBuilder modelBuilder){ 
... 
     modelBuilder.Entity<PcfPublishingDefinitionEntity() 
      .ToTable("IFM_PCF_PUBLISHING_DEFINITION"); 
     modelBuilder.Entity<PcfPublishingDefinitionEntity>() 
      .HasKey(e => new { e.ClassId, e.Channel, e.Format }); 
     modelBuilder.Entity<PcfPublishingDefinitionEntity>() 
      .Property(e => e.Channel) 
      .HasColumnName("PUBLICATION_CHANNEL"); 
     modelBuilder.Entity<PcfPublishingDefinitionEntity>() 
      .Property(e => e.Format) 
      .HasColumnName("PUBLICATION_FORMAT"); 
     modelBuilder.Entity<PcfPublishingDefinitionEntity>() 
      .Property(e => e.ClassId) 
      .HasColumnName("CLASS_ID"); 
     modelBuilder.Entity<PcfPublishingDefinitionEntity>() 
      .HasRequired(pd => pd.ClassDefinition) 
      .WithMany(cd => cd.PublishingDefinitions) 
      .HasForeignKey(pd => pd.ClassId); 
... 
} 

しかし、それは働いていません。 PublishingDefinitionsコレクションは常に空です。

私は間違っていますか?

+0

は、私はそれがOKに見えると言うでしょう。 あなたのコレクションは、他の理由で空である場合があります:万が一、遅延ロードを無効にしていますか? –

+0

クエリを取得する 'ClassDefinitionEntity'に' Include(e => e.PublishingDefinitions) 'を追加しようとしましたか?または、遅延ロード動作をしたい場合は、コレクションプロパティを 'virtual'にしてください。 –

+0

@AkosNagy:更新のために、LazyLoadingEnabledプロパティのOnModelCreatingをチェックしました。それは設定されていません。私は熱心な読み込みをしたい。 – webpat

答えて

2

EFでの1対多数または多対多の標準的な規則私は遅延読み込みとは、dbからデータをフェッチするときにコレクションに含めるようデータベースに指示する必要があると考えることです。 linqを使用している場合は.includeを使用します。

EG:設定に基づいて

yourdbcontext.ClassDefinitionEntity.Include(x => x.PublishingDefinitions).ToList(); 

Entity Framework Loading Related Entities

+0

私のDbSet .Includeメソッドはラムダ関数ではなく文字列を取るだけです... – webpat

+0

あなたのインクルードメソッドがラムダ関数を使わない理由をよくわかりません。私はこれをEF 6とEFコアで試してみました。ラムダ式。代わりにIdbsetを使用してみてください。または、Dbcontextから継承するクラスにすべてのdbsetを置く。また、使用しているステートメントとEFのバージョンも確認してください。そうでなければ、文字列パスは "PublishingDefinitions"でなければなりません。これはあなたのインクルードメソッドでうまくいくはずです。 –

+0

@IvanStoevは、これをコメントで明確にしました。Include(Func パス)メソッドは、** System.Data.Entity **名前空間の** QueryableExtensions **クラスにあります – webpat

関連する問題