私は基本的なMVCコアWeb APIを構築しており、Entity Frameworkを使用して接続しようとしていますが、「Lazy Loading」と呼ばれるものが出てきて、Lazy LoadingがEntityFrameworkを回転させているのですか?レイジーロードの例?
レイジーローディングはいつ使用され、どのように役立ちますか? entityframeworktutorialサイトから
私は基本的なMVCコアWeb APIを構築しており、Entity Frameworkを使用して接続しようとしていますが、「Lazy Loading」と呼ばれるものが出てきて、Lazy LoadingがEntityFrameworkを回転させているのですか?レイジーロードの例?
レイジーローディングはいつ使用され、どのように役立ちますか? entityframeworktutorialサイトから
私の意見では、遅延読み込みは、エンティティまたはエンティティのコレクションが自動的にデータベースから読み込まれるときのプロセスです。
実際には、並べ替えと検索のアルゴリズムはユーザー側で適用され、クエリはすべてのデータを取得します。デフォルトではLazy Loading機能はONになっていますが、手動で無効にすることもできますし、サーバー側でフィルタリングを行い、必要なレコードのみを取得するIQueryableを使用して賢明なクエリを作成することもできます。プラクティスでは、それは時間とリソースを大幅に節約するのに役立ちます、大量のトラフィックを防止し、サーバ
に過負荷をかけることにより、より良い答えは、イーガーロードVS [遅延ロードのこのウェブサイト - > https://msdn.microsoft.com/en-us/library/jj574232(v=vs.113).aspx
ありがとう!それは私がそれがどのように動作するのか簡単な分解を探していただけです。これは私のための新しい領域ですので、私は正しいことを確実にしたいと思っています。 – ARLCode
:
レイジーローディングは、あなたが具体的にするために要求されるまで、関連データの読み込みを遅らせることを意味します。例えば、Student
クラスは複合プロパティとしてStudentAddress
を含んでいます。したがって、コンテキストは最初にデータベースからすべてstudents
をロードし、次にStudentAddress
プロパティにアクセスすると、特定のアドレスstudent
をロードします。
using (var ctx = new SchoolDBEntities())
{
//Loading students only
IList<Student> studList = ctx.Students.ToList<Student>();
Student std = studList[0];
//Loads Student address for particular Student only (seperate SQL query)
StudentAddress address = std.StudentAddress;
}
上記のコードは2つのSQLクエリになります。その後、次の行に際制御リーチ
SELECT
[Extent1].[StudentID] AS [StudentID],
[Extent1].[StudentName] AS [StudentName],
[Extent1].[StandardId] AS [StandardId]
FROM [dbo].[Student] AS [Extent1]
:
StudentAddress address = std.StudentAddress;
はEFがStudentAddress
をロードするためにDBへの2番目のクエリを送信します:
exec sp_executesql N'SELECT
[Extent1].[StudentID] AS [StudentID],
[Extent1].[Address1] AS [Address1],
[Extent1].[Address2] AS [Address2],
[Extent1].[City] AS [City],
[Extent1].[State] AS [State]
FROM [dbo].[StudentAddress] AS [Extent1]
WHERE [Extent1].[StudentID] = @EntityKeyValue1',N'@EntityKeyValue1 int',@EntityKeyValue1=1
ルールまず、それはすべてのstudents
を取得しますレイジーローディングの場合:
context.Configuration.ProxyCreationEnabled
がtrueである必要があります。context.Configuration.LazyLoadingEnabled
が真である必要があります。ナビゲーションpublic
、virtual
と定義する必要があります。コンテキストが仮想として定義されていない場合は、 遅延読み込みを行いません(この場合、StudentAddress
はvirtual
である必要があります)。
可能な複製であります](http://stackoverflow.com/questions/31366236/lazy-loading-vs-eager-loading) –