等等!是哪个配置文件?(实体框架连接字符串)

18
因此,我在一个单独的类库中创建了我的实体模型。我必须在该类库的app.config文件中添加连接字符串。然后,在我的Web应用程序中添加了对该项目的引用。我认为在我的Web应用程序的web.config中添加相同的连接字符串,这是Entity Framework将从中读取连接字符串的位置。
一切都很好,直到我部署Web应用程序时出现问题。当我部署时,我更改了web.config中的连接字符串(而不是类库的app.config),然后我开始收到错误。经过一些研究,我发现web.configapp.config中的连接字符串必须匹配!
这太蠢了!每次我需要将我的Web应用程序部署到不同的环境中,我都必须返回并修改app.config文件中的连接字符串,然后重新编译我的类库项目,以便它可以获取更新的连接字符串?
有没有人找到更好的方法?我的意思是,我不能是唯一一个考虑将实体模型放在单独程序集中的人。
可能的解决方案(如果您使用EF 4.1):由于我们需要在类库项目中拥有app.config的唯一原因是EF设计器。如果我们放弃设计器方法并采用Code-First(EF 4.1),您将不需要为类库项目编写app.config文件。

4
我有完全相同的设置,但完全没有这个问题。我所做的只是修改了web.config文件,然后它就可以正常工作了。app.config并没有被部署,这可能是你遇到问题的原因。 - Alastair Pitts
我以为你已经找到了问题所在,但是我检查了一下,发现我没有复制/部署 app.config ... 不知何故,dll 知道当两个连接字符串(一个在 app.config 中,另一个在 web.config 中)不匹配时。如果我的 web.config 连接字符串可以覆盖 app.config,那就好了,但事实并非如此。 - Robert
1个回答

12

我们遇到了同样的情况。我要求每个开发人员只使用第一个选定的连接字符串来编译EF程序集。

这样,在部署时,web.config文件中只需要一个连接字符串。

如果每台开发机器和部署服务器在第一个(也希望是唯一的)连接字符串中都有正确的连接信息(针对该机器),那么生活就很轻松了。

基本上,当默认的连接字符串(最近选择的)无法连接时,设计师会向开发连接字符串中添加额外的连接字符串。

此外,将数据层放入单独的程序集中并不会使人感到不好。有时候这是更可取的。

最后,非常重要的一点是确保包含连接字符串的配置文件没有挂钩到源代码控制系统 -- 如果每次从源代码控制更新项目时都被坏值覆盖,连接字符串通常会被本地化,并可能导致EF和LINQ to SQL中的“多连接字符串”问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接