PDA

View Full Version : مشکل بارگزاری تمام کلاس های مرتبط با رکورد جاری حتی بدون ذکر متد Include !



Cybersilent
چهارشنبه 22 مهر 1394, 11:26 صبح
سلام.
توی یک پروژه MVC که برای لایه دسترسی به داده، الگوی واحد کار Uow پیاده سازی شده، وقتی که یک کوئری به شکل زیر زده می شود، EF به صورت پیش فرض تمام entity های مرتبط رو هم بارگزاری می کنه!
var t = db.UserRoleTemplates.ToList();
تعریف کلاس به شکل زیر هست:

public class UserRoleTemplate
{

public int Id { get; set; }
public int RoleTemplateId { get; set; }
public virtual RoleTemplate RoleTemplate { get; set; }


public int UserId { get; set; }
public virtual User User { get; set; }

}

تنظیمات فعال کردن Lazy Loading هم به صورت دستی فعال شده است:

public MyDataContext()
: base("MyContext")
{
this.Configuration.LazyLoadingEnabled = true;
}

با این شرایط من توقع دارم تا وقتی که متد Include به کار نرفته است مثلا User مرتبط با رکورد جاری را بارگزاری نکند اما اینطور نمی شود و تمام آبجکت های وابسته را تا آخر بارگزاری می کند!
ممنون می شوم کسی راهنمایی کند.

Hajivandian
چهارشنبه 22 مهر 1394, 18:15 عصر
با این شرایط من توقع دارم تا وقتی که متد Include به کار نرفته است مثلا User مرتبط با رکورد جاری را بارگزاری نکند

انتظار درستی داری و انتی تی فریم ورک هم اینکار رو نمیکنه. اما شاید شما در مفهوم LazyLoading دچار اشتباه شدید، تو حالت LazyLoading، با اولین درخواستتون به یک شی وابسته، انتی تی فریم ورک یه کوئری به دیتابیس میزنه و اون شیء رو لود میکنه (حتی وقتی دارید در حالت دیباگ این مسئله رو بررسی میکنید). برای بررسی این موضوع میتونید از یک پروفایلر استفاده کنید تا در مورد مطلبی که گفتم مطمئن بشید. https://expressprofiler.codeplex.com/

Cybersilent
دوشنبه 25 آبان 1394, 14:58 عصر
خب این مساله بخصوص هنگام سریالیز کردن باعث بروز خطا میشه و مثل اینکه هیچ راهی هم وجود نداره که بشود از آن جلوگیری کرد!!