2017-02-13 3 views
3

エンティティクラスが内部クラスである場合、エンティティフレームワークをLazyローディングコレクションに強制することは可能ですか?すべてのコードは、まずコードで書かれ、流暢なAPIです。私はこのような状況があります:エンティティが内部の場合、遅延ロードは機能しません。

internal class Order 
{ 
    public int Id { get; set; } 
    public ICollection<Operation> Operations { get; set; } 
} 

internal class Operation 
{ 
    public int Id { get; set; } 
    public int OrderId { get; set; } 
    public Order Order { get; set; } 
} 

internal MyContext : DbContext 
{ 
    internal DbSet<Order> Orders { get; set; } 
    internal DbSet<Operation> Operations { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Operation>().HasRequired(x => x.Order) 
             .WithMany(x => x.Operations) 
             .HasForeignKey(x=>x.OrderId); 
    } 
} 

そして、なぜエンティティフレームワークがOperations Collectionを遅延ロードしないのか分かりません。私は文脈の中で真のローディングを持っています。これを管理することは可能ですか?

答えて

4

public EFがプロキシクラスを作成し、遅延読み込みを有効にするには、クラスが必要です。詳細はmsdn pageをご覧ください。

カスタムデータクラスはパブリックアクセスで宣言する必要があります。

+0

これはそれですか?この話題にはどのような話題がありますか?私はEFチームがこれを正しく行う理由を理解していません。 – CrazyBaran

+0

カスタムアセンブリでエンティティモデルを定義しているので、EFはリフレクションを使用してモデルクラスを取得し、レイジーローディングを有効にするプロキシクラスを作成します(エンティティから継承するクラスのラッパーのようなものです)。それは 'public'である必要があります – octavioccl

+1

おそらく私はInternalVisibleTo EntityFrameworkを与える必要がありますか? – CrazyBaran

関連する問題