PDA

View Full Version : استفاده از lazy Loading و بررسی بهینه بودن آن



ali_autumnal
چهارشنبه 13 آذر 1392, 10:05 صبح
باسلام و خسته نباشید
درمورد lazy Loading یک سوالی داشتم.
فرض کنید مدل های زیر رو داریم. (همه مدل ها واقعی هستند و دقیقا بفرم زیر پیاده سازی شده اند! نرم افزار تحت وب MVC هستش)



public enum UType
{
a, b
}
//================================================== ====
public class U
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption .Identity)]
public int UId { set; get; }
public UType UType { set; get; }

//one-to-one
public virtual X X { set; get; }

//one-to-one
public virtual Y Y { set; get; }

//one-to-many
public IList<N> N { set; get; }

//one-to-many
public IList<C> C { set; get; }
}
//================================================== ====
public class X
{
[Key]
public int UId { set; get; }
public U U { set; get; }

public string XName { set; get; }
}
//================================================== ====
public class Y
{
[Key]
public int UId { set; get; }
public U U { set; get; }

public string YName { set; get; }
}
//================================================== ====
public class N
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption .Identity)]
public long NId { set; get; }

public int UId { set; get; }
public virtual U U { set; get; }

//one-to-many
public virtual IList<C> C { set; get; }

//one-to-many
public virtual IList<M> M { set; get; }
}
//================================================== ====
public class M
{

[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption .Identity)]
public int MId { set; get; }

public long NId { set; get; }
public N N { set; get; }

public string Content { set; get; }
}
//================================================== ====
public class C
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption .Identity)]
public long CId { set; get; }

public long NId { set; get; }
public N N { set; get; }

public int UId { set; get; }
public virtual U U { set; get; }
}


در یک کلاس دیگه ای اطلاعات رو از دیتابیس استخراج می کنیم و نمایش می دهیم.



public class Home
{
public void GetN()
{
//Start proc====================================
var ns = new List<N>(long);

var n = (from m in ns
where m.NId == Random
select n).FirstOrDefault();

Console.Write(n.NId);
if (n.U.UType == UType.a)
Console.Write(n.U.X.XName);
else
Console.Write(n.U.Y.YName);

foreach (var item in n.M)
Console.WriteLine(item.Content);

foreach (var item in n.C)
{
Console.Write(item.CId);
if (item.U.UType == UType.a)
Console.Write(item.U.X.XName);
else
Console.Write(item.U.Y.YName);
}
//End proc======================================
}
}


آیا بهینه است از lazy Loading در این پروژه بهره ببریم؟ با توجه به اینکه داده ها تقریبا نجومی افزایش پیدا می کنند.

parvizwpf
یک شنبه 17 آذر 1392, 18:57 عصر
وقتی صحبت از دیتای زیاده خودتون هم مدونید استفاده از لیزی میتونه خلی بهینه تر باشه. بهترین روش زدن کوئریهای با execution plan عالیه..