C# EF核心在插件库中使用单个DBContext迁移模型

C# EF核心在插件库中使用单个DBContext迁移模型,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,我正在尝试为一个应用程序构建一个简化的模块系统。目前,我正在尝试如何通过扫描模块中的程序集来迁移数据模型。我的项目结构如下 Core-所有接口、通用模型和构建器(如ASP.Net身份相关模型)。DbContext也在这个项目中 宿主-引用核心和插件的web项目的宿主将被复制到/plugin目录 ABC.ModuleA/B/C-每个模块都有自己的模型、模型构建器、控制器等 在核心项目DBContext中,我扫描模型并进行迁移,效果良好。它创建所有模块所需的通用模型(如ASP.Net标识派

我正在尝试为一个应用程序构建一个简化的模块系统。目前,我正在尝试如何通过扫描模块中的程序集来迁移数据模型。我的项目结构如下

  • Core-所有接口、通用模型和构建器(如ASP.Net身份相关模型)。DbContext也在这个项目中

  • 宿主-引用核心和插件的web项目的宿主将被复制到/plugin目录

  • ABC.ModuleA/B/C-每个模块都有自己的模型、模型构建器、控制器等

在核心项目DBContext中,我扫描模型并进行迁移,效果良好。它创建所有模块所需的通用模型(如ASP.Net标识派生模型和其他一些模型)

我想做的下一个更新是扫描宿主项目中/plugin目录中的插件,并调用modelbuilder的配置方法(每个插件都有IEntityTypeConfiguration模型生成器)

因此,基本上我更改了CORE DBContext中的onModelCreating方法,以获取DLL,进行一些反射并调用IEntityTypeConfiguration.Configure方法。它抛出以下异常

The shared-type entity type 'ABC.Core.Entities.Authentication.ApplicationRole'cannot be added because the model already contains an entity type with the same name, but with a different CLR type 'ApplicationRole'. Ensure all entity type names are unique.
我确保没有将另一个ApplicationRole错误地放置在另一个命名空间中。我唯一能怀疑的是,我的主机和模块项目都引用了ABC.Core项目。这可能是一个原因吗


对于一个基于插件的项目,什么是进行这种迁移的好方法?要求是当您执行添加迁移/更新数据库时,它应该扫描程序集并创建迁移脚本(即使模型是分开的,也会有一个迁移脚本)。我不希望每个插件都有单独的DBContext。我认为,通过反射,我们应该能够进行迁移,并在运行时将模型附加到插件中,以便整个应用程序可以在单个上下文中运行。

通过这一步,不会产生错误,您可以共享一些其他必要的代码吗?找到了一个比我需要的多得多的解决方案,但是从概念上讲,我有需要的。hello@user2058413我也在尝试做同样的事情,你有没有同样的最小项目。。在视频中解释的项目太大,英语太差,只需要一个概念。通过这一步,无法产生错误,你能分享一些其他必要的代码吗?找到了一个解决方案,它比我需要的多得多,但从概念上讲,我有需要的。hello@user2058413我正在尝试做同样的事情,你有一个最小的项目为相同的。。在视频中解释的项目太大,英语太差,一个概念都听不懂
The shared-type entity type 'ABC.Core.Entities.Authentication.ApplicationRole'cannot be added because the model already contains an entity type with the same name, but with a different CLR type 'ApplicationRole'. Ensure all entity type names are unique.