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 در این پروژه بهره ببریم؟ با توجه به اینکه داده ها تقریبا نجومی افزایش پیدا می کنند.
درمورد 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 در این پروژه بهره ببریم؟ با توجه به اینکه داده ها تقریبا نجومی افزایش پیدا می کنند.