用于数据访问的延迟初始化

时间:2010-10-08 21:08:13

标签: c# .net database lazy-loading lazy-evaluation

我正在访问数据库以批量填充字段。

PopulateAobjs();
PopulateBobjs();
PopulateCobjs();
...

填充值后,我将实体存储在Dictionary<Id, Entity>

我想让这个过程变得懒惰,如果我不需要C个对象,那么我就不需要调用那个方法了。等

如何做到这一点?

LazyInit&LT;&GT;

2 个答案:

答案 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