将实体框架模型从 Web 项目移动到类库中

问题描述 投票:0回答:1

我正在使用实体框架,最近意识到将 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 中,因为无论出于何种原因,这似乎都有效。

c# entity-framework entity-framework-4 linq-to-entities
1个回答
21
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.