我正在访问数据库以批量填充字段。
PopulateAobjs();
PopulateBobjs();
PopulateCobjs();
...
填充值后,我将实体存储在Dictionary<Id, Entity>
。
我想让这个过程变得懒惰,如果我不需要C
个对象,那么我就不需要调用那个方法了。等
如何做到这一点?
LazyInit&LT;&GT;
答案 0 :(得分:2)
而不是做这样的初始化例程,你宁愿使用延迟加载属性来做这些事情。
private Lazy<IEnumerable<CObject>> cObjects = new Lazy<IEnumerable<CObject>>(LoadCObjects);
public IEnumerable<CObject> CObjects
{
get { return this.cObjects.Value; }
}
CObjects
将在第一次访问该属性时加载。
编辑:当你不在.NET 4.0中时,Lazy<T>
只是一种奇特的方式:
private IEnumerable<CObject> cObjects;
public IEnumerable<CObject> CObjects
{
get
{
if (this.cObjects == null)
lock (this.someLockObject)
if (this.cObjects == null)
this.cObjects = this.LoadCObjects();
return this.cObjects;
}
}
答案 1 :(得分:0)
为此,我通常使用在属性get方法中加载集合的代码。根据类的不同,它将直接加载数据或请求全局缓存加载数据。
Property FooCustomers
Get
If _Customers IS NULL THEN Then _Customers = CustomerCache.FindByKey(companyKeys)
Return _Customers