我有一个包含两个项目的.NET解决方案:
“模型”项目包含Linq-to-SQL数据上下文以及一些扩展数据库对象的部分类。
连接字符串在“网站”项目的web.config中定义。
然而,'Models'项目似乎有自己的app.config,其中数据库连接是单独定义的。
这意味着如果连接字符串发生变化,我将不得不更新这两个项目。
有没有办法可以将连接字符串集中到一个地方,并且两个项目仍然可以使用它?
答案 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设计器的。没有什么可看的,继续前进,这些不是我们正在寻找的机器人。 。