使用DLL,而DLL又使用Entity Framework

时间:2016-07-14 13:41:39

标签: .net entity-framework dll

我们在我的应用程序的服务库中使用Entity Framework,但不希望在任何引用此DLL的应用程序中依赖于EF。我们遇到的问题是主要应用程序有两个问题:

  1. 它没有对EntityFramework.dll的引用(我认为这是一个MSBuild问题?)
  2. 我需要将连接字符串放在主应用程序App.Config文件
  3. 是否有任何解决方案或我们必须接受使用此DLL的任何应用程序将需要NUGet安装EF?

3 个答案:

答案 0 :(得分:0)

如果您的图书馆需要访问Entity Framework中的代码,则需要EntityFramework.dll提供的Entity Framework代码。

如果另一个应用程序使用了您的库,那么它也需要EntityFramework dll中的代码。您无法运行您没有的代码。 (传递)依赖是不可避免的。

答案 1 :(得分:0)

  

我们在我的应用程序的服务库中使用Entity Framework,但不希望在任何引用此DLL的应用程序中依赖于EF。

然后,您需要将库拆分为使用EF的类和不使用EF的类。如果您的库使用EF,那么应用程序将需要引用它,否则您将在运行时获得缺少的引用错误。

  

我需要将连接字符串放在主应用程序App.Config文件

是的,这就是应用程序配置的工作原理。您可以在app.config中配置应用程序(包括所有依赖库)。

答案 2 :(得分:0)

最好的情况是你仍然需要主配置文件中的连接字符串。 编译项目时,库dll将被复制到主bin文件夹。从那时起,它将从主机应用程序的配置文件中读取连接字符串详细信息。基本上你无能为力。

现在,如果您希望在主项目中不依赖于EF,那么这也意味着您无法使用任何涉及EF的代码。

如果您使用db first方法,那么EF将为您的数据创建模型类。我更喜欢不使用这些类,因为它们只存在于您的EF上下文中。您最好使用DTO - 数据传输对象,它们位于单独的库中,基本上可以重复使用。然后,如果需要,您可以轻松地从EF切换到其他内容。请记住,这不是主要目的,主要目的是实现分离关注,而不是硬编码使用任何数据库层。

因此,使用DTO,让您的库使用这些DTO返回数据,这意味着您的主应用程序永远不需要了解有关EF的任何内容,您可以删除对它的引用。

以下是我的意思:https://eidand.com/2014/08/17/separation-of-concerns-application-layers/