دنیای WCF ایی که از طریق وب در دسترس است، یک دنیای اصطلاحا detached است. در این حالت زمانیکه ctx.Bills.ToList را فراخوانی میکنید، لیست صورتحسابها از سرور دریافت شده و اتصال خاتمه پیدا میکند. اینجا دیگر lazy loading معنایی ندارد چون context جاری در سمت سرور بسته شده.
شما زمانی میتونید از lazy loading برای بارگذاری اشیاء مرتبط مانند حلقه زیر استفاده کنید:
که در یک context و در یک اتصال باز به سرور قرار داشته باشید. در این حالت EF تمام اتصالات و رفت و برگشتهای مورد نیاز را بدون کوئری نوشتن خاصی مدیریت میکند.
در WCF یکبار اطلاعات serialize شده و اتصال بسته میشود (البته WCF فراتر است از حالت http binding ساده؛ ولی عموما این مورد در برنامههای وب مدنظر است). بنابراین اینبار اگر dept.Employees را روی لیست تهیه شده فراخوانی کنید، پیغام بسته بودن اتصال رو دریافت میکنید. به همین جهت اگر نیاز به اطلاعات کارمندان هم هست، همه را باید به یکباره از سرور دریافت کرد.
شما زمانی میتونید از lazy loading برای بارگذاری اشیاء مرتبط مانند حلقه زیر استفاده کنید:
foreach (var dept in db.Departments) { Console.WriteLine(dept.Name); foreach (var item in dept.Employees) { Console.WriteLine(item.FirstName); } }
در WCF یکبار اطلاعات serialize شده و اتصال بسته میشود (البته WCF فراتر است از حالت http binding ساده؛ ولی عموما این مورد در برنامههای وب مدنظر است). بنابراین اینبار اگر dept.Employees را روی لیست تهیه شده فراخوانی کنید، پیغام بسته بودن اتصال رو دریافت میکنید. به همین جهت اگر نیاز به اطلاعات کارمندان هم هست، همه را باید به یکباره از سرور دریافت کرد.