将entity framework模型从Web项目移动到类库中

我正在使用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中,因为无论出于何种原因,这似乎都有效。

这是设计的; 虽然类库中的配置文件是设计器将使用的,但实际应用程序的配置文件将在运行时使用。 无论是用于ASP.NET项目的Web.config还是用于Winforms或WPF项目的App.config,它都是将要使用的应用程序配置文件(或更高级的内容,如Machine.config); 类库中的文件不是应用程序的一部分。

如果您尝试提供的EF模型无需在应用程序或Web配置文件中指定连接字符串即可工作,那么您必须以其他方式存储连接字符串(您可以始终对其进行硬编码)并将其传递给上下文构造函数的相应重载。

我的解决方案通常是在上下文本身上提供静态无参数函数,该函数使用适当的连接字符串调用此重载。