首页 > 解决方案 > Entity Framework Core 抛出关于不相关的 EF6 上下文的异常

问题描述

我有一个使用 EF Core 3.1 和 EF6 的稍微不同寻常的项目。EF Core 用于应用程序的主数据库,EF6 用于(旧版)身份数据库。该项目是用 .NET Framework 4.8 编写的,并使用 Microsoft.AspNet.Identity 来实现身份功能。该应用程序是一个 MVC Web 项目。

我已经配置了 EF Core DbContext,并设置了 DbSet 和模型,但是当我尝试使用任何 EF Core DbSet 从数据库中获取数据时,它会抱怨 EF6 上下文中的一个 DbSet 配置错误。

我并不完全清楚 EF Core 是如何知道其他上下文或其 DbSet 的。如果我不得不猜测,我会假设 Microsoft.AspNet.Identity 正在尝试变得聪明,并将其 DbSet 添加到某处的某种全局/公共变量中,而 EF Core 正在从那里获取它们。

据我所知,我可以在同一个应用程序中使用 EF6 和 EF Core,所以我认为这不是这些库的兼容性问题https://docs.microsoft.com/en-us/ef/efcore-and -ef6/并排此外,.NET Framework https://docs.microsoft.com/en-us/ef/core/miscellaneous/platforms支持 EF Core

我不确定旧的 Microsoft.AspNet.Identity(不是 Microsoft.AspNetCore.Identity)是否与 EF Core 兼容,但如果是,我愿意升级它并完全删除 EF6,但是 Microsoft.AspNet.Identity。 EntityFramework NuGet 包依赖于 EF6,所以我怀疑不是。

如果需要,我可以提供代码示例,但是这个应用程序有很多部分,我什至不知道从哪里开始。

谢谢

编辑:

我得到的例外是:

System.InvalidOperationException:“实体类型“ClassFromEF6Context”需要定义主键。如果您打算使用无密钥实体类型,请调用“HasNoKey()”。

但是,我不应该将这个实体定义HasNoKey()为不同的、不相关的上下文的一部分。

编辑2:

似乎modelBuilder.Ignore<ClassFromEF6Context>();可以用来掩盖问题。我愿意继续进行故障排除,我将继续寻找更好的解决方案,但至少我能够继续使用此解决方法

标签: c#asp.netentity-frameworkentity-framework-coreasp.net-identity

解决方案


推荐阅读