假设我有一个这样的课程:

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");


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

最佳答案

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

public class MyClass {
...

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


当然,那么您可能想要给客户一种刷新缓存的方法。

关于c# - 每次引用该 setter/getter 都会进行数据库调用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10458757/

10-17 02:05