这是访问数据库的只读属性的常见做法

时间:2011-04-18 18:14:48

标签: asp.net caching properties readonly

如果我在通过数据库填充自身的对象上有一个只读属性,这是我应该做的,还是有更好的方法来确保它已被评估过?

private List<Variable> _selectedVariables;
public new List<Variable> SelectedVariables
{
    get
    {
        if (_selectedVariables == null)
        {
            _selectedVariables = SomeFunctionThatCallsDB();
        }
        return _selectedVariables;
    }
}

1 个答案:

答案 0 :(得分:2)

这对单个线程来说很好;但如果您遇到多线程的情况,那么您将遇到问题。

编辑:Threadsafing:

简单的线程安全模式:

private readonly object _objectLock = new object();
private List<T> _someList = null;

public List<T> MyStuff
{
    get
    {
         if(_someList == null)
         {
             lock(_objectLock)
             {
                  if(_someList == null)
                     _someList = LoadFromDB();
             }
         }

         return _someList;
    }
}

您检查是否设置,然后锁定,然后再次检查以确保您已覆盖竞争条件。