【问题标题】:How do you store dynamic site settings in the database?您如何在数据库中存储动态站点设置?
【发布时间】:2020-10-18 11:19:52
【问题描述】:

您如何在数据库中存储动态网站设置/设计?

以前,我将它存储在一个看起来像这样的表中:

public class SiteSettings
{
    public int Id { get; set; }
    public string FooterText { get; set; }
    public string CopyrightInformation { get; set; }
    public string TextColor { get; set; }
}

在写入数据时,我检查了是否存在记录。如果没有,请创建一个。如果存在,请更新它。换句话说,该表中的记录永远不会超过一条。

读取数据时,我是这样做的:

SiteSettings settings = await db.SiteSettings.FirstOrDefaultAsync();

还有其他更好的方法吗?

【问题讨论】:

  • 这个问题实际上只能以当前形式的意见来回答,我们对您的上下文一无所知,无法判断什么是“更好”或“更差”。您对目前的工作方式有何不满?
  • 至于 DB:从您的示例中您想使用 ORM,EF Core 非常受欢迎:docs.microsoft.com/en-us/ef/core
  • @stefan 我不一定认为这是一种反模式;样式数据必须存储在某个地方,无论是在 db 中还是在 db 引用的磁盘(类似于 db)上的 css 文件中。我们对为什么选择这种方式知之甚少,所以在我们被告知为什么它不再满足要求之前,我们不能自动跳到假定它的“错误”?可能有一天网站是按客户设计的,在这种情况下,在数据库中进行某种品牌配置是有意义的。因为这是不灵活的,但对于需求(无论它们是什么)可能没有错跨度>
  • 还请注意,SO 不适用于软件推荐,但有一个专门的 SE 站点 - softwarerecs.se
  • @CaiusJard:因为TextColor 在里面,我觉得值得一提。显然,这取决于用例 - 但这似乎具有高水平的定制,我想给 OP 一个提示,他可能想重新考虑设置。只是试图提供替代方案。我知道 OP 没有要求它 - 我只是想提供另一种观点。例如,OP 也可以只存储 HTML。让我们看看 - 我会在 OP 阅读后删除我的评论。

标签: c# database-design asp.net-core-mvc


【解决方案1】:

您始终可以将其以 JSON 格式存储在一张表、一行、一列中。但它会稍微接近字段名称更改,因此您稍后将添加新设置,它们必须是您的类定义中的可空类型。而且,如果您以后想使用名称和类结构,则可能还必须手动修复 DB 上的更改。这样做的好处是,您可以在嵌套对象中设计设置类,而不必处理为每个嵌套对象制作不同的表:

{
  SiteTitle : "My Web Site",  
  Theme: "Dark",
  DbSettings : {
     ConnectionString : "",
     ConnnTimeout : 30
  },
  HomePage : {
     WelcomeMessage : "Hello!"
     MainMenu : {
       Position : "left",
       ShowIcons : true
     }
  }
}

如果这不适合您并且您仍想在数据库表中单独存储字段,那么我建议将您的设置存储在 Key、Value 结构中的多行中,并从列表中找到您想要的设置及其键.否则,您将不得不在每次需要时向类添加新属性,将列添加到数据库,重新构建,重新部署等。此外,如果这是一个长期项目,您的表列随着新的要求,数量会随着时间的推移而增加,一段时间后它会变得非常难看。但是,如果您存储 Key/Value,一开始的工作量会更大,但以后的工作量会更少..

【讨论】:

    猜你喜欢
    • 2011-10-17
    • 2011-05-15
    • 2023-04-09
    • 1970-01-01
    • 2015-02-23
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    相关资源
    最近更新 更多