【问题标题】:.NET Core Web application using .NET Framework business layer with .NET Standard between.NET Core Web 应用程序使用 .NET Framework 业务层与 .NET Standard 之间
【发布时间】:2019-10-01 12:56:54
【问题描述】:

在我的解决方案中,我有一个业务层,其中包含一些针对 .NET Framework 4.7 的项目(包括 EntityFramework 数据访问层和大量逻辑)。现在我想用 .NET Core 2.2 制作一个 Web 应用程序。我意识到 .NET Core 与 .NET Framework 不兼容,但 .NET Standard 与两者兼容。将业务层从 .NET Framework 转换为 .NET Standard 或 .NET Core 不是一种选择,因为工作量太大。

我的问题:

是否可以在我的业务层中添加一个 .NET Standard 项目作为中间人,接受来自 .NET Core Web 应用程序的所有请求并在我的 .NET Framework 项目中调用代码(包括访问 EF 数据)?

【问题讨论】:

  • 是的,有可能。
  • @hmiedema9:不,不是。如果一个项目依赖于另一个项目,它也会依赖于该项目的所有依赖项。您在构建时可以很容易地看到这一点,因为所有的 DLL,即使是那些没有被项目直接引用的 DLL,都将位于 bin 文件夹中。如果 EF6 在依赖关系树中的任何位置被引用,则不能将其与 .NET Core 项目一起使用(目前,至少 - 3.0 将支持)
  • 你可以多目标
  • EF6.3 preview 带来 .net 标准/核心支持,敬请期待 .net core 3 和 EF6.3 发布
  • 多目标在这里不会给您带来任何好处。您仍然无法为 .NET Core 目标引用任何 EF6 库,因此您必须将依赖项仅隔离到 .NET Framework 端,然后您仍然需要为 .NET Core 提供某种解决方案目标。

标签: asp.net asp.net-mvc entity-framework asp.net-core .net-standard


【解决方案1】:

没有。这是不可能的。无论您在中间添加多少层,仍然存在对 EF6 的依赖,而 .NET Core 当前不支持。你有两个选择:

  1. 您也可以使您的 ASP.NET Core 项目以 .NET Framework 为目标。仅仅因为它的名称中有“Core”,并不意味着它必须以 .NET Core 为目标。当然,此时您将无法跨平台运行,但如果您已经在运行面向 .NET Framework 的应用程序的各个部分,那么这可能不是问题。

  2. 您可以完全忽略当前代码,并为使用 EF Core 并将数据库视为现有数据库的 ASP.NET Core 应用程序创建单独的 DAL,从而允许您在实体中搭建基架来表示数据库。这当然会增加一些代码重复,但由于您可以随时在数据库更改时重新构建脚手架,因此它相对较小。

不管怎样,.NET Core 3.0(目前为预览版)将原生支持 EF6,因此一旦发布,您就可以毫无问题地瞄准 .NET Core。

【讨论】:

  • 如果我使 .NET Core 项目以 .NET Framework 为目标,以便它可以使用 EF6,那么一旦 .NET Core 3.0 发布,我是否可以再次切换回目标 .NET Core?
  • 当然。您可以随时切换目标,只要新目标支持您的所有代码和依赖项。在这方面,请注意不要在 .NET Framework 中添加任何在 .NET Core 3.0 中仍不受支持的内容,尽管该列表肯定在缩小。
猜你喜欢
  • 2017-08-15
  • 2016-10-04
  • 1970-01-01
  • 2020-06-08
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
相关资源
最近更新 更多