【问题标题】:.Net Standard Library DbContext For EF Core and EF 6适用于 EF Core 和 EF 6 的 .Net 标准库 DbContext
【发布时间】:2021-07-15 19:48:35
【问题描述】:

我有一个在 net48 上运行的网络应用程序和几个在 netcoreapp3.1 上运行的 API。我目前的目标是 .Net 标准库中的 nestandard2.0、netcoreapp3.1 和 net48。所有应用程序共享同一个数据库,因此我尝试将 EF 6 与我的 .Net 应用程序和 EF 核心与我的 .Net Core API 一起定位。我能够在我的 .Net 应用程序中使用 EF Core,但有一些限制(主要是用户管理)。是否可以在我的 DbContext 类中同时定位 System.Data.Entity.DbContext 和 Microsoft.EntityFrameworkCore.DbContext ?我一直在尝试这样的事情:

#if NETCOREAPP3_1
    public class MyContext: Microsoft.EntityFrameworkCore.DbContext
#elif NET48
    public class MyContext: System.Data.Entity.DbContext
#endif

我似乎还没有找到一个好的解决方案。我什至尝试将整个类放在预处理器指令中,但 nada。这可能是不可能的,所以我可以针对 EF Core,但如果我仍然可以在我的 .Net 应用程序中使用 EF6,那么从架构的角度来看会容易得多。

【问题讨论】:

  • 将两者包装在存储库/工作单元中。
  • EF6 支持 .Net 标准 2.1,所以可以在 netcoreapp3.1 和 net48 中使用。
  • @WiktorZychla 我考虑过这一点,但我担心 EF 的缓存。如果我调用 API 以使用 Core 上下文更新数据库,即使我更新实体状态,我是否也能够在 EF 6 上下文中看到该更新?
  • @GertArnold 如果我可以使用一个继承自 DbContext 的类,那就太好了。我目前可以使用 EF Core 做到这一点,但这对我的 MVC 应用程序来说很痛苦
  • 正如我所说,仅适用于 EF6。 (!= EF core 6,当前的 alpha 版本)。

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


【解决方案1】:

EF Core 3.1 和 EF 6.4 都在 netcoreapp3.1 和 net48 中工作。但是 EF Core 3.1 已经很老了,没有更高版本支持 .NET Framework。

因此,如果您想使用单个 DbContext,请使用 EF Core 6.4。它甚至更老,但比 EF Core 3.1 更完整、更稳定。但是将 EF 6 与 .NET Core 一起使用可能会很痛苦。

我考虑过,但我担心 EF 的缓存。

这不是一个真正的问题。您的 net48 Web App 和 .NET Core API 是独立的应用程序,不共享任何对象。在任何情况下,每个都有自己的 DbContext。

因此,您应该在 net48 Web 应用中使用 EF 6.4 或 EF Core 3.1,在 .NET Core Web API 中使用 EF 5。您可以让 DbContext 工作起来一样,因此使用代码只需更改命名空间,但没有真正好的方法来使用单个 DbContext。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 2021-04-14
    • 2016-10-10
    • 1970-01-01
    相关资源
    最近更新 更多