【问题标题】:Static C# variable, throw an error because of a database connection静态 C# 变量,由于数据库连接而引发错误
【发布时间】:2013-06-26 16:25:42
【问题描述】:

我想知道是否有办法克服这种情况:

我有一个静态类,其中有一个名为 let's say 的静态变量

static string[] Cities = GetCities();

GetCities 从数据库中获得所有城市。问题是我收到GetCities 的错误,因为数据服务器有时不可用,即使服务器再次可用,此错误也不会消失。
我认为这是因为变量 Cities 仅创建一次...

【问题讨论】:

  • 你可以创建一些初始化方法来尝试连接到数据库,然后将需要的信息保存到Cities

标签: c# .net linq static


【解决方案1】:

我认为这是因为变量 Cities 只创建一次

这是正确的:GetCities() 将只有一次调用;如果失败,将不会有其他调用。要解决此问题,请将Cities 更改为只读属性,并在获得结果时缓存GetCities() 的结果。

static string[] cachedCities = null;
public static string[] Cities {
    get {
        return cachedCities ?? (cachedCities = GetCities());
    }
}

【讨论】:

  • 非常感谢,我会接受这个答案
  • @robertwolfheart 欢迎您!如果您不再寻找改进的解决方案,您可以接受您认为有帮助的解决方案,以表明您已经找到了解决方案。这也将为您赢得 Stack Overflow 上的新徽章。
【解决方案2】:

你真的不应该在初始化类型时进行数据库访问。

考虑为您的数据库查询引入缓存机制。

【讨论】:

    【解决方案3】:

    每个类只发生一次静态初始化。当静态初始化期间发生异常时,CLR 会存储该异常。该类的未来使用将自动重新抛出相同的异常,而不是触发任何重新初始化。您无法更改此行为。

    【讨论】:

      猜你喜欢
      • 2021-08-08
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多