entity-framework - 将 EF Core 迁移拆分到多个项目

标签 entity-framework entity-framework-core

是否可以拆分(不移动到单个类库项目)迁移到多个 .NET Core 类库?

我遵循将应用程序拆分为几个独立模块的架构设计。 ( Source )

但是我在将迁移拆分到多个项目时遇到了问题。这受支持吗?

在启动时,我加载特定文件夹中的 dll 文件。在 DbContext.OnModelCreating 中,我注册了从加载的 dll 文件加载的所有类型并注册了实体。

 protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            List<Type> typeToRegisters = new List<Type>();
            foreach (var module in GlobalConfiguration.Modules)
            {
                typeToRegisters.AddRange(module.Assembly.DefinedTypes.Select(t => t.AsType()));
            }

            RegisterEntities(modelBuilder, typeToRegisters);

            base.OnModelCreating(modelBuilder);

            RegisterCustomMappings(modelBuilder, typeToRegisters);
        }

        private static void RegisterEntities(ModelBuilder modelBuilder, IEnumerable<Type> typeToRegisters)
        {
            var entityTypes = typeToRegisters.Where(x => x.GetTypeInfo().IsSubclassOf(typeof(EntityBase)) && !x.GetTypeInfo().IsAbstract);
            foreach (var type in entityTypes)
            {
                modelBuilder.Entity(type);
            }
        }

        private static void RegisterCustomMappings(ModelBuilder modelBuilder, IEnumerable<Type> typeToRegisters)
        {
            var customModelBuilderTypes = typeToRegisters.Where(x => typeof(ICustomModelBuilder).IsAssignableFrom(x));
            foreach (var builderType in customModelBuilderTypes)
            {
                if (builderType != null && builderType != typeof(ICustomModelBuilder))
                {
                    var builder = (ICustomModelBuilder)Activator.CreateInstance(builderType);
                    builder.Build(modelBuilder);
                }
            }
        }

但我不知道如何使用 context.Database.Migrate();

执行迁移

想法是,如果 ASP.NET Core 部署不包含特定模块,则不会创建/更新表。如果在未来的任何时候,客户购买了模块 D,我就将 dll 发送给他们。下一次启动 context.Database.Migrate(); 将创建所有表并为该模块应用迁移。

附加示例:
想法是将应用程序拆分为模块。假设模块 A、B 和 C。客户 1 购买模块 A 和 B,客户 2 购买模块 A 和 C。

没有必要为客户 1 创建模块 C 的表,为客户 2 创建模块 B 的表。

在未来的某个时候,客户 1 购买了模块 C(他们收到了模块 C 的 dll)。现在应该为模块 C 创建表和所有迁移。

据我所知,迁移可以专用于特定项目。 Link .我看到的唯一问题是 ContextModelShapshot

最佳答案

给定 DbContext 的所有 Migration 类都需要在同一个程序集中。要将它们拆分到不同的程序集中,您需要单独的 DbContext 类。

您可能会找到 Using a Separate EF Core Migrations Project有趣的文档页面。

关于entity-framework - 将 EF Core 迁移拆分到多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48355992/

相关文章:

sql-server - 使用 LINQ 根据 Id 列表按顺序选择多行

c# - 延迟加载-( Entity Framework )底层连接意外关闭

c# - 使用单个 Entity Framework Core DbContext 管理具有同名表的多个数据库模式

c# - Net core EF 3.1 LINQ 字符串比较不再有效

wpf - 如何编辑WPF GridView并将其保存到数据库?

c# - 如何在 EF4.3 代码优先中映射到复杂类型或从复杂类型映射?

asp.net-mvc - Entity Framework 6.0 代码优先迁移到 Azure SQL DB 不起作用。

multi-tenant - Entity Framework 7 拦截器

c# - 是否可以使用 .Net EF Core 从现有数据库加载部分对象方案?

asp.net-core - ASP.NET Core SQL 连接超时