zoukankan      html  css  js  c++  java
  • 【EFCORE笔记】配置迁移操作

    多个提供程序的迁移

    EF Core 工具仅为当前活动的提供程序创建迁移文件,有时,你可能需要分别为多个提供程序创建迁移,有两种方法来处理这种情况:1、维护两个不同版本的迁移集;2、合并到单个迁移集,针对不同提供程序个性化设置。

    维护两个不同版本的迁移集

    Add-Migration InitialCreate -Context MyDbContext -OutputDir Migrations

    SqlServerMigrations

    Add-Migration InitialCreate -Context MySqliteDbContext -OutputDir Migrations

    SqliteMigrations

    dotnet ef migrations add InitialCreate --context MyDbContext --output-dir Migrations/SqlServerMigrations

    dotnet ef migrations add InitialCreate --context MySqliteDbContext --output-dir Migrations/SqliteMigrations

    合并到单个迁移集,针对不同提供程序个性化设置

    Id = table.Column<int>(nullable: false)
            .Annotation("SqlServer:ValueGenerationStrategy",
                    SqlServerValueGenerationStrategy.IdentityColumn)
            .Annotation("Sqlite:Autoincrement", true),
    
    if (migrationBuilder.ActiveProvider == "Microsoft.EntityFrameworkCore.SqlServer")
    {
            migrationBuilder.CreateSequence( name: "EntityFrameworkHiLoSequence");
    }
    

      

    自定义迁移历史记录表

    默认情况下,EF Core 将已应用到数据库的(update-database)迁移,记录在

        EFMigrationsHistory 迁移历史记录表中, 由于各种原因,你可能想要自定义此表,以更好地满足你的需求。

    更改架构和表名

    options.UseSqlServer(connectionString,x => 
    x.MigrationsHistoryTable(" MyMigrationsHistory", "mySchema"));
    

      

    其它更详细的配置

    若要配置的表的其它方面,需要重写并替换 IHistoryRepository 服务。

    class MyHistoryRepository : SqlServerHistoryRepository
    {
            public MyHistoryRepository(HistoryRepositoryDependencies dependencies)
                    : base(dependencies)
            {
            }
    
            protected override void ConfigureTable(EntityTypeBuilder<HistoryRow> history)
            {
                    base.ConfigureTable(history);
    
                    history.Property(h => h.MigrationId).HasColumnName("Id");
            }
    }
    

      

    options 
    .UseSqlServer(connectionString)
    .ReplaceService<IHistoryRepository, MyHistoryRepository>();
    

      

    创建和删除API

    // Drop the database if it exists
     dbContext.Database.EnsureDeleted();
    
    // Create the database if it doesn't exist 
    dbContext.Database.EnsureCreated();
    

      

    微软同时提供了这些方法的异步版本。

    若要使用的 EnsureCreated SQL,您可以使用 GenerateCreateScript 方法。

    var sql = dbContext.Database.GenerateCreateScript();
    

      

    仅当数据库中不存在任何表时,EnsureCreated 才会起作用。 如果有必要,也可以编写自己的检查逻辑,来查看架构是否需要进行初始化,可通过实现 IRelationalDatabaseCreator 接口来初始化架构。

    / TODO: Check whether the schema needs to be initialized
    // Initialize the schema for this DbContext
    var databaseCreator = dbContext.GetService<IRelationalDatabaseCreator>();
    
    databaseCreator.CreateTables();
    

      

    在生产平台中迁移

    myDbContext.Database.EnsureCreated() 
    myDbContext.Database.Migrate(); 推荐
    

      

    使用 SQL 脚本

  • 相关阅读:
    Vue Cli3.0 使用jquery
    使用js加载器动态加载外部js、css文件
    通过js获取本机的IP地址
    $.ajax 中的contentType类型
    vue中 :style 与 :class 三元运算符使用
    bootstrap table checkbox获得选中得数据
    vscode自动生成文件头部注释和函数注释
    axios二次封装的几种方法
    vue组件库element-ui 的Table内容显示不更新
    Linux中iptables设置详细
  • 原文地址:https://www.cnblogs.com/lbonet/p/14579967.html
Copyright © 2011-2022 走看看