所以,我在一个单独的类库中创建了我的实体模型。我不得不将连接字符串添加到该类库的app.config
文件中。然后我在我的Web应用程序中为该项目添加了一个ref。我在我的Web应用程序的web.config
中添加了相同的连接字符串,认为这是Entity Framework将从中读取连接字符串的位置。
在部署我的网络应用程序之前,一切都很好。当我部署时,我更改web.config
(不是类库中的app.config
)中的连接字符串,我开始收到错误。在做了一些研究后,我发现web.config
和app.config
中的连接字符串必须匹配!!
这真是愚蠢!每次我需要将我的Web应用程序部署到不同的环境时,我必须返回并修改app.config
文件中的连接字符串,然后重新编译我的类库项目,以便它可以获得刷新的连接字符串?
有没有人找到更好的方法呢?我的意思是,我不能仅仅想到将实体模型放在一个单独的组件中。
可能的解决方案(如果您使用的是EF 4.1): 因为我们需要在类库项目中使用app.config的唯一原因是EF设计师。如果我们抛弃设计者方法并使用Code-First(EF 4.1),您将不需要为您的类库项目提供app.config文件。
答案 0 :(得分:12)
我们遇到了同样的情况。我已经要求每个开发人员只编译EF程序集,并选择第一个连接字符串。
这样,部署时,web.config中只需要一个连接字符串。
最终,如果每个开发计算机和部署服务器在第一个(并且仅希望是唯一的)连接字符串(即不是ConnectionString4)中具有正确的连接信息(对于该计算机),则生活很简单。
基本上,当默认连接字符串(最新选择的)无法连接时,设计者会将额外的连接字符串添加到dev连接字符串。
此外,没有理由将数据层放入单独的程序集中。有时这是更可取的。
最后,确保包含连接字符串的配置文件没有挂钩到源代码控制非常重要 - 连接字符串经常被本地化,并且会导致EF和LINQ中的“多连接字符串问题”如果每次从源代码管理更新项目时,它都会被错误的值覆盖。