我正在使用Entity Framework,并且最近意识到将EF模型放在同一解决方案中的另一个项目中的好处,以便我可以从中构建多个UI。
我将其移至新的类库项目并更新了对Web项目中实体的所有引用,以使用项目生成的新dll。除了一个小障碍外,一切都进展顺利。当我将EF移动到新项目时,不知何故它仍在从Web项目中的web.config读取其连接字符串(不要问我怎么做因为我没有线索)。
我在EF设计器中使用了“从数据库更新模型”并且没有找到连接字符串(正如我将其移动到新项目后所预期的那样)所以我使用向导生成一个新的连接字符串,它就是它做得很好新的连接字符串现在位于类库项目中的App.config中。属性窗口中的连接字符串现在是正确的,设计人员正在从App.Config中读取它。我继续从web项目中删除Web.Config中的连接字符串。
现在运行应用程序时出现以下错误:
在配置中找不到指定的命名连接,不打算与EntityClient提供程序一起使用,或者无效。
如果我将连接字符串粘贴回Web.Config,它一切正常。我不想从头开始创建一个新的EF模型,因为它是一个相当复杂的模型,我从数据库中取出后进行了大量的重组。我已经把生成的CS文件以及edmx文件中的XML倾倒了,找不到任何有用的东西。任何帮助深表感谢。显然现在,直到我弄清楚这一点,我只是将连接字符串留在web.config中,因为无论出于何种原因,这似乎都有效。
答案 0 :(得分:21)
这是设计上的;虽然类库中的配置文件是设计人员将使用的,但实际应用程序的配置文件将在运行时使用。无论是用于ASP.NET项目的Web.config还是用于Winforms或WPF项目的App.config,它都是将要使用的应用程序配置文件(或更高级的内容,如Machine.config);类库中的文件不是应用程序的一部分。
如果您尝试提供的EF模型无需在应用程序或Web配置文件中指定连接字符串即可使用,那么您必须以其他方式存储连接字符串(您可能总是很难 - 编码)并将其传递给上下文构造函数的相应重载。
我的解决方案通常是在上下文本身提供静态无参数函数,该函数使用适当的连接字符串调用此重载。
答案 1 :(得分:0)
需要连接字符串的UI项目太可笑了。只有包含Entity Framework规范的类库才需要连接数据库的字符串或什至对Entity Framework的引用。这会将抽象泄漏到您的UI项目中,该项目甚至不应该知道数据库是什么。