在Entity Framework Core中为所有数据库创建和应用迁移

尤里·N

我有ApplicationDbContext,它可以动态地将连接字符串更改为数据库,具体取决于用户的库名。因此,对于每个库,我都有自己的数据库。在创建迁移并应用它们时,它们仅与具有默认连接字符串的默认数据库相关,其中未定义库名。

我如何才能对所有这些动态创建的数据库进行迁移并将其应用到库中,这些数据库取决于库名(它们在创建后就存在,它们已经完全定义并且可以正常工作)?

塞里·基斯里

如果我对您的理解正确,则应执行以下操作:

1)实施服务,该服务将迁移您的架构和种子数据。(尽管他们在最新版本中做了什么,我仍然更喜欢我的实现)

帮手

    public static async Task EnsureSeedData(IServiceProvider serviceProvider)
    {
        using (var scope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope())
        {
            // here could be several seed services if necessary
            var seedService = scope.ServiceProvider.GetService<ISeedService>();
            await seedService.MigrateAsync();
            await seedService.SeedAsync();
        }
    }

ISeedService接口

internal interface ISeedService
{
    Task MigrateAsync();
    Task SeedAsync();
}

SeedService实施

internal sealed class SeedService : ISeedService
{
    private readonly InitializeContext _identityContext;

    public SeedService(InitializeContext identityContext)
    {
        _identityContext = identityContext;
    }

    public async Task MigrateAsync()
    {
        await _identityContext.Database.MigrateAsync();
    }

    public async Task SeedAsync()
    {
        if (_identityContext.AllMigrationsApplied())
        {
            var strategy = _identityContext.Database.CreateExecutionStrategy();
            await strategy.ExecuteAsync(async () =>
            {
                using (var transaction = await _identityContext.Database.BeginTransactionAsync())
                {
                    // seed data if necessary
                    transaction.Commit();
                }
            });
        }
    }
}

Program.cs文件

public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateWebHostBuilder(args).Build();
        Task.Run(async () =>
        {
            await SeedData.EnsureSeedData(host.Services);
        }).Wait();
        host.Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

2)在DI中注册上下文和相关服务,这将允许动态检索连接字符串。有几种方法可以实现,我的实现不是最好的方法,所以这取决于您。

Startup.cs文件

public class Startup
{
    public IConfiguration Configuration { get; }
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddTransient<ISeedService, SeedService>();
        services.AddScoped<IDbConfiguration, FakeDbConfiguration>();
        services.AddDbContext<InitializeContext>((provider, builder) =>
        {
            var dbConfiguration = provider.GetService<IDbConfiguration>();
            builder.UseSqlServer(dbConfiguration.Connection);
        });

        // omitted
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // omitted
    }
}

DbConfiguration文件。

internal sealed class FakeDbConfiguration : IDbConfiguration
{
    private readonly IConfiguration _configuration;
    public FakeDbConfiguration(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    // REPLACE THIS PART WITH YOURS IMPLEMENTATION
    public string Connection => _configuration["Database:Connection"];

希望对您有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Entity Framework Core中创建迁移时,如何配置DbContext?

来自分类Dev

在Entity Framework 6.0中从数据库更新模型

来自分类Dev

从具有空的MigrationHistory表的现有生产数据库迁移Entity Framework

来自分类Dev

无法使用Entity Framework代码优先+没有数据库创建数据库

来自分类Dev

在MVC中使用Entity Framework Code First更新现有数据库

来自分类Dev

在应用程序启动时使用Entity Framework核心运行数据库迁移

来自分类Dev

如何设置Entity Framework Core迁移超时?

来自分类Dev

有什么方法可以直接查询Entity Framework Core使用的内存数据库?

来自分类Dev

如何使用Entity Framework代码优先从数据库中删除所有相关实体

来自分类Dev

无法使用Entity Framework Core 3.1.3更新数据库

来自分类Dev

没有使用Entity Framework Core 3.1在MySql数据库中创建User表(代码优先方法)

来自分类Dev

如何将Entity Framework Core数据库测试为具有大量行插入功能的InMemory

来自分类Dev

使用Entity Framework在.NET Core 3.1中进行迁移后,如何更新数据库模型?

来自分类Dev

从Entity Framework Core中的cookie和基本路径创建数据库上下文

来自分类Dev

从Postgres数据库为Entity Framework Core创建类

来自分类Dev

无法使用Entity Framework Core更新数据库

来自分类Dev

无效的列名Entity Framework Core

来自分类Dev

Entity Framework 6.1.2中基于代码的数据库迁移:如何避免使用powershell命令?

来自分类Dev

在Entity Framework Core中为所有数据库创建和应用迁移

来自分类Dev

在应用程序启动时使用Entity Framework核心运行数据库迁移

来自分类Dev

如何避免先使用Entity Framework代码和现有数据库进行迁移?

来自分类Dev

在Entity Framework中嵌套嵌套

来自分类Dev

Entity Framework Core 无法在 android 三星设备上创建数据库文件

来自分类Dev

Entity Framework Core 中的 SqlGeometry

来自分类Dev

将 DbContext.SaveChanges 异常记录到 Entity Framework/Entity Framework Core 中的数据库

来自分类Dev

为类库创建 Entity Framework Core 迁移

来自分类Dev

Entity Framework Core 不在我的数据库中创建表

来自分类Dev

使用 Entity Framework Core、npgsql、PostgreSQL 创建新数据库

来自分类Dev

使用动态数据库连接在 Entity Framework Core 中添加迁移

Related 相关文章

  1. 1

    在Entity Framework Core中创建迁移时,如何配置DbContext?

  2. 2

    在Entity Framework 6.0中从数据库更新模型

  3. 3

    从具有空的MigrationHistory表的现有生产数据库迁移Entity Framework

  4. 4

    无法使用Entity Framework代码优先+没有数据库创建数据库

  5. 5

    在MVC中使用Entity Framework Code First更新现有数据库

  6. 6

    在应用程序启动时使用Entity Framework核心运行数据库迁移

  7. 7

    如何设置Entity Framework Core迁移超时?

  8. 8

    有什么方法可以直接查询Entity Framework Core使用的内存数据库?

  9. 9

    如何使用Entity Framework代码优先从数据库中删除所有相关实体

  10. 10

    无法使用Entity Framework Core 3.1.3更新数据库

  11. 11

    没有使用Entity Framework Core 3.1在MySql数据库中创建User表(代码优先方法)

  12. 12

    如何将Entity Framework Core数据库测试为具有大量行插入功能的InMemory

  13. 13

    使用Entity Framework在.NET Core 3.1中进行迁移后,如何更新数据库模型?

  14. 14

    从Entity Framework Core中的cookie和基本路径创建数据库上下文

  15. 15

    从Postgres数据库为Entity Framework Core创建类

  16. 16

    无法使用Entity Framework Core更新数据库

  17. 17

    无效的列名Entity Framework Core

  18. 18

    Entity Framework 6.1.2中基于代码的数据库迁移:如何避免使用powershell命令?

  19. 19

    在Entity Framework Core中为所有数据库创建和应用迁移

  20. 20

    在应用程序启动时使用Entity Framework核心运行数据库迁移

  21. 21

    如何避免先使用Entity Framework代码和现有数据库进行迁移?

  22. 22

    在Entity Framework中嵌套嵌套

  23. 23

    Entity Framework Core 无法在 android 三星设备上创建数据库文件

  24. 24

    Entity Framework Core 中的 SqlGeometry

  25. 25

    将 DbContext.SaveChanges 异常记录到 Entity Framework/Entity Framework Core 中的数据库

  26. 26

    为类库创建 Entity Framework Core 迁移

  27. 27

    Entity Framework Core 不在我的数据库中创建表

  28. 28

    使用 Entity Framework Core、npgsql、PostgreSQL 创建新数据库

  29. 29

    使用动态数据库连接在 Entity Framework Core 中添加迁移

热门标签

归档