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

Che*_*hev 17 c# linq-to-entities entity-framework entity-framework-4

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

Ada*_*son 21

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

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

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

  • 等等,这意味着类库中的app.config文件毫无意义?编译的库是否应该可以访问自己的资源?它是如何知道其他项目中的web.config的? (3认同)
  • @Chevex:在运行时,是的,这是毫无意义的.配置文件不是资源,它只是一个配置文件,它是项目的一部分.构建项目对它没有任何作用.它知道Web.config,因为它使用.NET的配置管理器,启动的应用程序(在您的情况下是一个Web应用程序)将它指向那里. (2认同)