【问题标题】:How do I configure Entity framework in class Library project?如何在类库项目中配置实体框架?
【发布时间】:2014-10-13 21:06:00
【问题描述】:

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

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

我已将 edmx 的 Metadata Artifact 处理属性设置为 Embed in Output Assembly

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,我已经更新了我的问题,请看一下。谢谢
  • 配置文件中当前名为“Gumu_IntegrationEntities”的connectionString需要改名为“ABC”。

标签: c# asp.net-mvc entity-framework wcf service


【解决方案1】:

根据你给的the link,可能你错过了这部分。

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

解释:

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

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

【讨论】:

  • 嗨 Yuliam 我已经完成了将现有 app.config 添加到我从 dll 访问 edmx 的域项目中,但得到了同样的错误。
  • @Nik's,domain project 是解决方案中的启动项目吗?并且启动项目是否有带有连接字符串信息的配置?
  • 不,我们没有将任何连接字符串添加到域项目中,是的,它是一个启动项目。
  • @Nik's,那么你需要在域项目(启动项目)中添加配置文件。然后提供连接字符串信息和EF相关部分
  • @Nik 的,你仍然需要有一个连接字符串来引用本地数据库文件,要么在启动项目中,要么在 dbcontext 连接中以编程方式提及它,但是因为你明确提到了这个@ 987654322@,这意味着 EF 在启动项目配置文件中需要一个连接字符串名称
【解决方案2】:

我一直致力于创建实现所有 EF(实体框架)功能的类库,并遵循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 安装实体框架,并从测试项目的配置文件中的 Dll 配置文件复制连接字符串。

希望这可以帮助某人! 谢谢,

【讨论】:

    【解决方案3】:

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

    另外,将 DbProviderFactories 从库项目复制到主项目的配置文件。

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

      • 更改配置文件可能比重新编译数据层更容易。
      • 对不起,安德鲁,我的连接字符串名称是 ABC,错误地发布了。
      • 好的,然后确保引用正确的 app.config 文件(不是模型所在的文件,而是执行代码的程序集)。
      • 并基于“Entity.ABC.csdl”,我假设您的模型“ABC”位于项目的“Entity”子文件夹中
      • 是的,安德鲁,我们在类库项目中有正确的 csdl,我们正在访问 app.config 文件以配置 edmx。谢谢
      猜你喜欢
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-09
      相关资源
      最近更新 更多