DB Schema的最佳ASP.NET ConfigSection

时间:2008-10-20 21:32:15

标签: asp.net database-design configuration

以前,ASP.NET应用程序部署的设置使用KEY / VALUE格式存储在Web.config配置部分下的多个配置文件中。出于各种原因,我们正在将这些“站点模块选项”移动到数据库中。

以下是我们正在考虑的两个选项:
1.一个表,其中applicationId,moduleId和key作为具有Value字段的主键。
优点:
- 这模仿文件访问。
- 很容易选择整个部分来缓存哈希表/值对象。
缺点:
- 更难以更新,因为每个密钥都需要单独更新。
- 如果不是字符串,则必须转换每个值。


2.每个部分的单独表格,用于分隔存储过程,类等。
优点:
- 由于键入了列和对象类型,因此保证数据一致。
- 通过显式接口在数据库的一次访问中完成更新。
缺点:
- 必须更改应用程序界面才能访问
- 每次更改时都必须更新对象,数据库表和存储过程。

这些中的任何一个听起来都是好主意还是我可能忽略了另一种方式?

3 个答案:

答案 0 :(得分:1)

如果我理解你提出的正确建议。我会做第一种方法。它利用您已经构建的内容。我会在包装类中使用哈希表进行缓存,这些类可以为属性提供强大的类型接口。

例如:

/// <summary>
/// The time passwords expire, in days, if ExpirePasswords is on
/// </summary>
public int PasswordExpirationDays {
    get { return ParseUtils.ParseInt(this["PasswordExpirationDays"], PW_MAX_AGE);}
    set { this["PasswordExpirationDays"] = value.ToString(); }
}

答案 1 :(得分:0)

另一种选择是将类似设置组合到它们自己的类中,然后使用XML序列化/反序列化来存储和检索这些设置类的实例与数据库之间的对比。

除了您不需要自己执行任何类型的转换之外,这并没有特别提供超出键/值对的优点(这是在序列化/反序列化过程的一部分后面完成的 - 所以它仍然确实发生了)。我发现这种方法非常适合解决您所面临的配置问题。它干净,快速实施,非常容易扩展,并且非常容易测试。您不必花时间创建功能丰富的API来获取您的设置,特别是如果您已经将配置子类化了。

同样在紧要关头,您可以将设置指向数据库表或文件系统,而无需更改序列化/反序列化代码(在开发过程中这非常好)。

最后,如果您正在使用SQL Server(可能是Oracle,虽然我没有Oracle和XML的经验)并且您预先考虑了设置类的设计,您可以为序列化配置对象实例定义XML模式因此,您可以使用XQuery快速获取配置设置的值,而无需完全反序列化。

答案 2 :(得分:0)

我们就是这样做的 - Click Here

我们更关心的是,不同的环境(Dev,Test,QA和Prod)对同一个键具有不同的值。现在,我们在WebEnvironment.Config文件中只有2个密钥,永远不会被提升。第一个键是你在哪个环境,第二个键是连接字符串。

表格被加载一次到字典,然后我们可以在我们的代码中使用它:

  cApp.AppSettings["MySetting"];