【问题标题】:How to store configurable strings in C# project?如何在 C# 项目中存储可配置的字符串?
【发布时间】:2012-05-16 09:55:29
【问题描述】:

我有一个数据库,其中包含一个名为“Roles”的表,其中包含“Id”和“RoleName”列。 这些是表中的行:

  • GUID1 管理员
  • GUID2 系统
  • GUID3 技术员
  • GUID4正常

“用户”表中的用户可以拥有多个角色。 我想要 LINQ 代码来检查特定用户是否具有“技术员”角色。

这是我现在的代码:

using (MyDbEntities entities = new MyDbEntities())
{
    User user = entities.Users.Where(u => u.Id == userIdToFetch).Single();

    // Check if user is 'Technician'
    if (user.Roles.Any(role => role.Name == "Technician") == true)
    {
         // user IS technician - do work here
    }
}

我的问题是 - 我不想将字符串“Technician”硬编码到我的代码中, 因为也许有一天数据库中的角色名称会更改为“Tech”。

我已经研究过使用“资源”,但这并不好,因为更改资源中的字符串意味着重新编译项目。

我不想在配置文件中添加包含此信息的部分, 因为在我看来这太过分了……

有什么建议吗?

【问题讨论】:

    标签: c# configuration settings


    【解决方案1】:

    您可以将其作为设置放入,这意味着您可以修改配置文件,尽管这将基于每个用户。

    你可以创建一个 dll 来保存字符串,然后引用它,那么更新只会意味着重新部署 dll

    您可以将字符串放入文件中,然后从那里加载它们,记住您还必须部署该文件。

    【讨论】:

      【解决方案2】:

      我会使用一个表来存储所有不同的角色,并将角色的 ID 与用户的角色 ID 相关联。这样,只要角色 ID 保持不变,您就可以随意更改角色的名称。

      【讨论】:

      • 这正是我今天所做的。但是您建议在代码中我必须硬编码技术人员角色 ID 的 GUID,而不是字符串“技术人员”。这似乎会产生我非常丑陋的代码,不是吗?
      • 您不必对 GUID 进行硬编码。您可以在配置文件中添加一个设置,在其中存储您拥有的任何角色的 GUID。这就是我通常做的。我的应用程序中总是有一个配置对话框,我可以在其中添加/删除/编辑这样的东西。如果您稍后添加新角色,也会更容易。
      • 那么为什么不在设置文件中这样做呢?
      • 没有理由不这样做。这就是我对配置文件的意思。我通常只是为用户添加一个表单来添加/编辑这些 ID 或其他任何东西。
      【解决方案3】:

      我认为配置文件或资源正是您想要使用的。我想这只是找到正确平衡的问题:

      要么避免配置文件的复杂性,但需要编译,要么避免编译,但在其他地方找到(某种配置文件,无论是文本文件,还是带有您自己的常量的 .dll可以读取,或其他东西)来存储它。在任何情况下,您都需要创建 something 来读取它。

      【讨论】:

        【解决方案4】:

        您可以通过在您的解决方案中放置角色的 XML 文件或在 .config 文件中添加条目来做到这一点。

        【讨论】:

        • 如果我可以使用设置文件,为什么还要使用 XML 文件或 CONFIG 文件?
        猜你喜欢
        • 1970-01-01
        • 2018-03-28
        • 2017-09-04
        • 2012-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多