1

假设我有这样的课程:

public class MyClass {
...    
    public List<SomeClass> MyProperty {
        get { 
            SomeClass.GetCollectionOfThese(someId);
        } 
    }
...
}

GetCollectionOfThese()调用数据库以检索构建集合所需的记录。现在假设我在其他地方有以下代码:

MyClass obj = new MyClass(someId);
List<SomeClass> temp = obj.MyProperty;

...

SomeClass otherObj = obj.MyProperty.FirstOrDefault(i => i.Foo == "bar");

在这种情况下,数据库是否被调用了两次?还是属性值缓存在内存中?

4

2 回答 2

3

您的实现将导致多个数据库调用。如果你需要的话,你必须做缓存。就像是:

public class MyClass {
...    

    private List<SomeClass> _myProperty = null;
    public List<SomeClass> MyProperty {
        get { 
            if (_myProperty == null) _myProperty = SomeClass.GetCollectionOfThese(someId);
            return _myProperty;
        } 
    }
...
}

当然,那么您可能希望为客户端提供一种刷新缓存的方法。

于 2012-05-05T04:23:26.260 回答
1

这取决于您在数据层中使用的技术。例如,如果您将 Linq2Sql 与单个 DataContext 一起使用,DataContext 将为您缓存实体并从缓存中重新查询它,以便您只访问数据库一次。但这不是典型的方案。

于 2012-05-05T05:19:00.593 回答