【问题标题】:Two .NET projects, one DB connection string?两个 .NET 项目,一个数据库连接字符串?
【发布时间】:2010-11-22 07:21:19
【问题描述】:

我有一个包含两个项目的 .NET 解决方案:

  • 一个 ASP.NET MVC 项目,“网站”
  • 类库,“模型”

“模型”项目包含一个 Linq-to-SQL 数据上下文以及一些扩展数据库对象的部分类。

连接字符串在“网站”项目的 web.config 中定义。

然而,“模型”项目似乎有自己的 app.config,其中数据库连接是单独定义的。

这意味着如果连接字符串发生变化,我将不得不更新两个项目。

有没有一种方法可以将连接字符串集中到一个地方,并且仍然让两个项目都使用它?

【问题讨论】:

    标签: .net asp.net-mvc configuration connection-string


    【解决方案1】:

    创建一个与您的数据上下文相同的部分类,并使用此代码强制使用 web.config 字符串而不是 app.config。将分部类放在类库中与模型相同的位置。

    public partial class YourDataContext 
    {
        partial void OnCreated()
        {
            ConnectionStringSettings cs = ConfigurationManager.ConnectionStrings["PrimaryConnectionString"];
    
            if (cs != null)
            {
                 this.Connection.ConnectionString = cs.ConnectionString;
            }
        }
    }
    

    有关更多信息,请参阅此问题Preferred Method for connection string in class library
    RichardOD 发布了一个链接,指向我认为最能描述我们问题的内容LINQ To SQL and the Web.Config ConnectionString Value

    【讨论】:

    • 但是这将如何工作,因为部分类必须属于同一个程序集?我希望“模型”程序集使用“网站”程序集中的 web.config 中的连接字符串。
    • 顺便说一句,我没有投反对票。
    • 上面的代码将尝试将连接字符串设置为“PrimaryConnectionString”,它将在 web.config 中找到,因为这是配置管理器将查看的位置。否则,如果值为 null,onCreated 方法将继续并使用在设计器生成的数据上下文类中找到的默认信息。 RichardOD 发布了一个很棒的链接,讨论了整个主题。您也可以尝试阅读我在此stackoverflow.com/questions/1148559 上的类似问题
    • 我还可以补充一点,我称我的 app.config 连接字符串与我的 Web CS 不同,“SecondaryConnectionString”
    • 相信我它会起作用,因为我在我的项目中就是这样做的。将该部分类放在与模型相同的位置并查看!
    【解决方案2】:

    库中的 app.config 不会影响生产——那些连接字符串确实存在于 linq2sql 设计器中。没什么可看的,继续前进,这些不是我们正在寻找的机器人。 . .

    【讨论】:

      【解决方案3】:

      就个人而言,我在我的 Respository 中扩展 DataContext 然后执行以下操作:

      public ContractsControlRepository()
            : base(ConfigurationManager.ConnectionStrings["AccountsConnectionString"].ToString()) { }
      

      这样我的存储库就可以被实例化,我永远不用担心建立连接,或者不得不处理它。要更改/更改开发/实时数据库,我只需更改我的 web.config。

      【讨论】:

        【解决方案4】:

        如果您的模型类库在您的 Web 应用程序中被引用,您可以简单地删除 App.Config 文件中的引用,并确保您有类似于放置在您的 Web 中的内容。配置。这样,当编译器在 web.config 中查找时,它会找到 MVC 项目所需的连接字符串,因此无需再往下查找。

        【讨论】:

        • 我试过这个,但它似乎是从模型项目属性下的“设置”文件中获取连接字符串。类中有这样的代码:'global::Models.Properties.Settings.Default.WebConnectionString, mappingSource)'
        • @jonathanconroy :这正是我的回答将帮助您解决此问题的原因。
        【解决方案5】:

        没关系。将模型的连接字符串放在 Web.config 中,然后忘记(删除)模型的配置文件。

        DataContext 还在其构造函数中接收一个连接字符串,因此您也可以通过这种方式指定它(尽管可能不在一行上):

        DataContext context = new DataContext(ConfigurationManager.ConnectionStrings["TheKey"].ConnectionString);
        

        编辑-根据您对其他答案的 cmets,您似乎做错了什么。如果您这样做,则生成的代码将使用默认设置值。

        System.Configuration.DefaultSettingValueAttribute("Data Source=SERVER;Initial Catalog=XYZ;Integrated Security=True")].
        

        您可能在 Web.config 文件中犯了 not specifying the connection string properly 的错误。

        【讨论】:

        • @RichardOD:我在评论,但我实际上并没有问这个问题,虽然我确实问过一个与此类似的问题。我从未尝试只删除 appconfig 文件。我姑姑建议过,但我在项目中也有一些数据集模型,在这种情况下,您必须创建许多部分 tableadapter 类,我不打算这样做,所以我没有尝试删除该应用程序。配置,但我想它会工作。
        【解决方案6】:

        您不需要类库 app.config。只需将您的配置放在 web.config 中。此外,如果您需要库的 app.config 中的一些配置部分,只需将其放在 web.config 中即可。 ConfigurationManager 将从那里读取它。

        【讨论】:

          【解决方案7】:

          我认为模型库中的连接字符串只是设计者使用的。在运行时,字符串从 web.config 加载。所以你不一定需要同步字符串。

          【讨论】:

          • 这不是我在将这样的解决方案部署到生产中后发现的。库继续从 app.config 中提取连接。
          【解决方案8】:

          好吧,我猜这里,但看起来两个项目都使用相同的连接字符串,是吗?

          这种情况下,只需要在web.config中指定连接字符串即可;无论如何,ASP.NET 不会读取类库 app.config。

          【讨论】:

          • 除非我配置错误,否则这不是我的经验。
          • 真的吗?您是否正在使用为您执行此操作的第三方组件?因为根据我的经验,系统默认只读取可执行文件的 app.config(或者在 ASP.NET web.config 的情况下)。如果存在与类库 (.DLL) 关联的 app.config,则该 app.config 的内容必须是 A) 手动加载(这是为您执行此操作的第三方组件)或 B) 复制到主应用程序的 app.config/web.config。
          • @Randolpho:请参阅stackoverflow.com/questions/1148559 以了解与我有关的更多说明。
          • @Randolpho:顺便说一句,我没有对你投反对票,有人也对我投了反对票。
          【解决方案9】:

          我会说你应该将产品的配置保留在web项目的web.config中,然后将你使用的配置注入到模型项目中。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-10
            • 1970-01-01
            • 2012-11-21
            • 2012-10-05
            • 2013-11-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多