【发布时间】: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