1

怠け者と熱心な負荷を組み合わせることが可能かどうかは疑問です。 たとえば、関連エンティティデータを読み込む必要がないGETメソッドを持つWeb Apiコントローラが1つありますが、別のWeb ApiコントローラとそのメソッドGETが関連エンティティからデータを取得する必要があります。EFでの怠け者と熱心なローディングの結合

これらの2つの方法を組み合わせるのがよい習慣であり、設定が必要な特定の設定はありますか?

+0

これらの2つを組み合わせることは可能ですが、指定したシナリオは熱心な読み込みのみを使用して行うことができます。可能であれば、1つのアプローチに固執するほうがずっと良いです。 –

+2

私はこの質問が「良い実践」よりも少し意見集になるかもしれないかと疑問に思います... –

+0

もちろん、それは意見に基づいています。要件を知らなくても、どのように良い習慣をお勧めしますか? –

答えて

2

はい、そうすることができます。あなたのような実際の状況に応じて、それは良い習慣です。

Lazylodingが必要な場合は、その特定の方法で以下のように無効にすることができます。

public List<PropertyListDto> SearchProperties(AdditionalSearchInput input) 
{ 
    _context.Configuration.LazyLoadingEnabled = false;//to remove lazy loading 

    ///your code 
} 

注: Entity Frameworkの4にして遅延ロードを越えてはデフォルトで有効になっています。 disableこれは、グローバルに、DbContextレベルに、または選択的に上記のようにquery levelにあります。

レベルはDbContextレベルです。

public partial class MyDBEntities : DbContext 
    { 
     public MyDBEntities(): base("name=MyDBEntities") 
     { 
      this.Configuration.LazyLoadingEnabled = false; 
     } 
    } 

更新:below.Thenを示すようにあなたがconstractorレベルでそれを無効にすることができ、あなたがをlazyloding必要はありません 50台のコントローラは、各メソッドにquery levelにそれを与えるためにを必要としない私はそれを実装する非常に速い方法だと思います。

public class YourAppService : IYourAppService 
    { 
     private readonly YourDbContext _context; 

     public YourAppService(YourDbContext context) 
     { 
      _context = context; 
      _context.Configuration.LazyLoadingEnabled = false;//to remove lazy loading 
     } 
} 
+0

遅延ロードはデフォルトで有効になっていますか?だから、私が熱心なロードを使う必要があるなら、あなたが今説明したことをしますか? – ruud

+0

はい、デフォルトでは 'on'です。これは、' Eager loading'を使うときに、上のようにすることができます。 – Sampath

+0

私は 'this.Configuration.LazyLoadingEnabled = false;'を実行すると、_Include_メソッドを使って各メソッドにeager loadingを実装する必要がありますか?この構成に基づいて、GETメソッドの結果は(関連するエンティティがロードされているかどうか)は何ですか? – ruud

関連する問題