【问题标题】:Should we add Entity Framework dll to all layers我们是否应该将实体框架 dll 添加到所有层
【发布时间】:2015-11-06 20:52:46
【问题描述】:

我首先使用 EF 代码编写测试应用程序。我在不同的层之间分布了代码。我以为我只需要将实体框架包安装到数据访问层,但我最终将包(添加 dll)安装到所有层,即 UI、BLL、模型、DAL。这是可以的还是我做错了什么。下面是示例代码,让您了解我正在尝试做什么

模型层

这个层是所有其他层/项目的参考

namespace Model
{
   Public class Sample
   {
      [ForeignKey("Sample2Id")]
      ...

   }
} 

在这一层我不得不使用实体框架 dll,因为像 [ForeignKey.. 这样的数据注释

DAL

namespace DAL
{
   public class SampleContext:DbContext
   {
      ...
   }
}

在 DAL 中,我只有上下文类和迁移

BLL

namespace BLL
{
   public class SampleBLL
   {
       public List<Sample> GetAll()
       {
          retrn new SampleContext().Samples().ToList()
       }
   }
}

如果我为 BLL 卸载 EF,我会收到以下错误 System.Data.Entity.DbContext 类型是在未引用的程序集中定义的。

用户界面

namespace UI
{
   public class UIHelper
   {
      public List<Sample> GetSamples()
      {
         return new SampleBLL().GetAll();
      }

   }
}

如果我从 UI 卸载 EF 包,我会收到以下错误

实体框架提供程序类型 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' 在应用程序配置文件中注册 对于具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序 无法加载。确保程序集限定名称是 已使用并且该程序集可用于正在运行的应用程序

【问题讨论】:

  • 您必须在所有层(引用它)中安装 EF dll。我不知道为什么这是必要的。我希望我们能找到能解释的人。

标签: entity-framework ef-code-first entity-framework-6


【解决方案1】:

我创建了一个示例项目,它与您当前的设置非常相似,但减去了模型层/DAL 分离。

我有三个项目,DAL(其中包含对EntityFramework.dllEntityFramework.SqlServer.dll 的引用),BLL,它只是调用 中的一个方法DAL,以及只调用 BLL 方法的 UI

我必须将 DALapp.config&lt;configSections&gt;&lt;entityFramework&gt;&lt;connectionStrings&gt; 部分添加到 UI 的 @987654327 @。

当我第一次运行代码时,我遇到了与您遇到的相同的错误。因此,我查看了我的 UI 项目的调试文件夹,并注意到 EntityFramework.dll 由于 DAL 的 对它的依赖而被复制到该文件夹​​中。我还注意到 EntityFramework.SqlServer.dll 没有被复制到调试文件夹中,尽管 DAL 也依赖于它。

我将EntityFramework.SqlServer.dll 复制到 UI 项目的调试文件夹中,然后重新运行该项目,Viola!我的代码按预期运行。

这里的问题似乎是没有像预期的那样将一个 dll 复制到 UI 项目调试文件夹中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多