两个.NET项目,一个DB连接字符串?

时间:2009-08-24 14:31:47

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

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

  • ASP.NET MVC项目,'网站'
  • 一个类库,'Models'

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

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

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

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

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

9 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

没关系。将Model的连接字符串放在Web.config中并忘记(删除)Model的配置文件。

DataContext还在其构造函数中接受一个连接字符串,因此您也可以这样指定它(可能不在一行上):

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

编辑 - 基于您对其他答案的评论,看起来您做错了什么。如果您这样做,那么生成的代码将使用默认设置值。

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

我认为模型库中的连接字符串仅供设计人员使用。在运行期间,字符串从web.config加载。所以你不一定需要让字符串同步。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

如果您的Web应用程序中引用了您的模型类库,您只需删除App.Config文件中的引用,并确保您有类似于Web中的引用。配置。这样,当编译器查找web.config时,它将找到MVC项目所需的连接字符串,因此无需进一步查看它。

答案 7 :(得分:0)

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

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

这样我的存储库就可以实例化了,我从不担心建立连接,或者无论如何都要处理它。要更改为dev / live数据库,我只需更改我的web.config。

答案 8 :(得分:0)

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