【问题标题】:loading configuration settings from a database从数据库加载配置设置
【发布时间】:2014-05-20 20:12:40
【问题描述】:

我目前正在用 C# 编写一个 MVMC 应用程序(使用实体框架)。

加载和存储配置值的正确(最佳实践)方式是什么?

首先,有一个问题是如何存储配置设置...最好的方法是让表设计成这样:tblConfig(configid, configref, configval) 或这样:tblConfig(configid,option1 ,option2,option3) - 将 option1 等替换为有意义的名称(例如 logoimage)

接下来是如何在应用程序中检索/存储设置;我的想法是将配置存储在数据库中的表中,然后创建一个静态类 - 如下所示:

public static class ConfigClass
{

    public static ConfigClass()
    {
        //load values from database
        ContextClass SiteContext = new ContextClass();

        logoImage = SiteContext.ConfigSettings.ToList().Find(c => c.configreference == "logoimage").configvalue;
        admintoauthoriseaccounts = Convert.ToBoolean(SiteContext.ConfigSettings.ToList().Find(c => c.configreference == "logoimage").configvalue);
        defaultaccountrole = Convert.ToInt32(SiteContext.ConfigSettings.ToList().Find(c => c.configreference == "logoimage").configvalue);

    }

    public static string logoImage = "";
    public static bool admintoauthoriseaccounts = true;
    public static Int32 defaultaccountrole = 1;

}

ConfigSetting DbSet 存储库的类:

public class ConfigSetting
{
    public string configreference { get; set; }
    public string configvalue { get; set; }
}

这是个好主意吗?还是应该忘记静态类,直接从 DbSet 存储库中读取设置?

谢谢。

【问题讨论】:

  • 您希望能够为所有用户更改这些设置吗?是否要保存每个用户的设置?这是对实际需求的非常模糊的描述。
  • 是的,很抱歉。配置设置是站点范围的,并且只允许一组配置值。我希望网站管理员能够更改它们。
  • 当您说站点范围时,是网站范围还是应用程序站点范围?如果是网站,更改 web.config 将导致网站重新启动(人们可能会丢失信息)等等,如果不是,则需要担心。
  • 网站范围。例如管理员可以设置一个选项以确保必须首先授权新用户帐户,或者自动激活新用户帐户。但是因为它们可以改变;我宁愿通过 GUI 完成,这样我可以限制他们输入的值 - 并确保所有配置引用都存在。

标签: c# entity-framework


【解决方案1】:

最常见的做法是将配置(包括连接到该数据库的字符串)存储在项目的 app.config(或 web.config)中。您存储在数据库中的任何设置只会将值添加到,我猜,允许用户修改。

如果这是你的目标:

  1. 将用户自定义设置存储在 db 中
  2. 将应用程序配置存储在 app.config/web.config 中

否则:

  1. 将两者都存储在 app.config 中。
  2. 通过类、静态类、单例模式等为您的其他层提供服务。

不管那个选择:

  1. 最好不要使用静态类一遍又一遍地访问数据库进行设置。这会导致性能下降。
  2. 像徽标图像这样的品牌听起来不像是需要经常更改或每个用户都需要更改的东西,也不值得存储在数据库中。

【讨论】:

  • 同意。是的,对于直接配置,我只使用 web.config 或 app.config。如果您确实将配置存储在数据库中,您可能需要实现缓存以避免每次需要查找配置条目时对数据库进行不必要的往返。
  • 该配置用于站点范围的设置,可由管理员更改。我不太关心数据库设计 - 我当然可以缓存数据......我的主要问题实际上是关于如何构建我的类以检索和存储应用程序中的设置。
猜你喜欢
  • 2013-10-22
  • 2015-12-25
  • 2013-09-18
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多