如何在类库项目中配置Entity Framework?

14

我创建了一个类库项目,其中包含实体框架对象,它将为我的多个项目负责通用的数据访问层。在将生成的dll文件添加到我的域项目并使用来自类库项目的实体对象后,我遇到了以下问题。

在应用程序配置文件中找不到名为“ABC”的连接字符串。

我已将edmx的元数据艺术品处理属性设置为嵌入到输出程序集中

App.Config标记

  <?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="ABC" connectionString="metadata=res://*/Entity.ABC.csdl|res://*/Entity.ABC.ssdl|res://*/Entity.ABC.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\ABC.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
</configuration>

实体代码如下:

public ABC_IntegrationEntities()
            : base("name=ABC")
        {
        }

还有一件事:我正在从数据目录“App_Data”访问数据库。

我正在引用来自dotnetcurry.com的博客。


为了回答这个问题,我们需要查看您的app.config文件内容以及Context类(Object或Db)的构造函数。 - Rob Epstein
嗨,Rob,我已经更新了我的问题,请看一下。谢谢。 - Nik's
配置文件中当前名为“Gumu_IntegrationEntities”的connectionString需要改为“ABC”。 - Rob Epstein
4个回答

9

根据您提供的链接,可能您错过了这部分。

现在,您可以在此项目中创建自己的.config文件,并添加模型的connectionstring条目,或者简单地复制您在MyEntityModel项目中创建的App.config文件,在您的控制台应用程序项目中。我们将采用更简单的方法。右键单击项目 > 添加现有项 > 转到MyEntityModel项目并添加App.config文件。

说明:

当您创建一个库并且该库被另一个项目引用时,EF将读取相对于启动项目的配置。您可以执行以下操作之一。

  • 从库的配置中复制配置(复制文件并将其粘贴到启动项目)
  • 创建新的配置,但复制连接字符串信息和其他EF相关部分
  • 通过添加现有项将现有配置添加为链接到库的配置

嗨Yuliam,我已经尝试将现有的app.config添加到域项目中,在从dll访问edmx时仍然遇到相同的错误。 - Nik's
@Nik's,domain project 是解决方案中的启动项目吗?启动项目是否有包含连接字符串信息的配置? - Yuliam Chandra
不,我们没有将任何连接字符串添加到域项目中,是的,它是一个启动项目。 - Nik's
@Nik,你需要在域项目(启动项目)中添加配置文件。然后提供连接字符串信息和EF相关部分。 - Yuliam Chandra
谢谢回复,实际上我在类库项目内的data目录下有一个数据库文件。我没有连接到任何测试服务器。 - Nik's
1
@Nik's,你仍然需要一个连接字符串来引用本地数据库文件,可以在启动项目中或在dbcontext连接中以编程方式提及它,但因为你明确提到了base("name=ABC"),这意味着EF期望在启动项目配置文件中有一个连接字符串名称。 - Yuliam Chandra

1
我一直在创建一个实现所有EF(Entity Framework)功能的类库,并按照http://www.dotnetcurry.com/showarticle.aspx?ID=617中概述的过程进行操作,但仍然出现错误。
问题是EF框架和.Net框架之间的版本不匹配。我使用的是.Net框架5.0,但EF版本为6.0。更新最新版本的.Net框架后,一切开始正常工作。始终确保EF和Dll版本+EF和测试项目版本始终相同。
我还下载并安装了EFTools6.1.3ForVS2013,如果有帮助的话。另一件要记住的事情是,在引用EF Dll的所有项目中都必须从Nuget安装Entity Framework,并将连接字符串从Dll配置文件复制到测试项目的配置文件中。
希望这能帮助到某些人!!!
谢谢,

1
从库项目的配置文件中复制您的SQL连接字符串并将其粘贴到主项目的配置文件中,即启动项目。这将解决您的问题。
此外,将DbProviderFactories从库项目复制到主项目的配置文件中。

0

在您的上下文类构造函数中更改实体连接字符串的名称:

public ABC_IntegrationEntities()
                : base("name=Gumu_IntegrationEntities")
            {
            }

确保将应用程序配置文件添加到您从中执行代码的程序集中,即您的 PE 的 app.config 或您的网站的 web.config


更改配置文件可能比重新编译数据层更容易。 - Rob Epstein
抱歉,Andrew,我的连接字符串名称是ABC,我错误地发布了它。 - Nik's
好的,那么请确保引用正确的 app.config 文件(不是您的模型所在的文件,而是执行代码的程序集的文件)。 - Andrew
基于 'Entity.ABC.csdl',我假设你的模型 'ABC' 位于项目的 'Entity' 子文件夹中。 - Andrew
是的,安德鲁,我们已经将适当的csdl放置在类库项目中,并且我们正在访问app.config文件以配置edmx。谢谢。 - Nik's
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接