簡體   English   中英

EF-Core 單一部署; 多個數據庫; 遷移

[英]EF-Core Single Deployment; Multiple Databases; Migrations

我目前有一個 .net core web api,每個客戶端都有一個 SQL Server 數據庫。 每次調用都需要傳入一個 api 密鑰,然后在主租戶數據庫中查找以獲取正確的連接字符串。 然后 api 將在啟動文件中設置連接字符串並運行調用。

在 api 中,我有一個端點,允許我將所有租戶更新到最新的遷移,我還有一個控制台應用程序可以執行相同的操作。 像這樣的東西:

public async Task UpdateAllDatabases()
    {
        var qry = await GetAll(null, true);
        foreach (var i in qry)
        {
            var optionsBuilder = new DbContextOptionsBuilder<MigrationContext>().UseSqlServer(i.DatabaseConnectionString);
            using (var tenantContext = new MigrationContext(optionsBuilder.Options, _appSettings))
            {
                tenantContext.Database.Migrate();
            }
        }
    }

我遇到的問題是何時需要remove-migration 如何從所有租戶數據庫中刪除遷移?

您可以使用相同的Migrate方法,但參數為'targetMigration'。

這會將所有數據庫升級或回滾到指定的目標遷移。

public void Migrate (string targetMigration = null);

https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.entityframeworkcore.migrations.imigrator.migrate

更新:添加了示例

MigrationContext.cs

public class MigrationContext : DbContext
{
}

執行遷移

using (var tenantContext = new MigrationContext())
{
    tenantContext.Database.GetService<IMigrator>().Migrate("targetMigration");
}

.csproj文件

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.2</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.4" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.4" />
  </ItemGroup>

</Project>

我很喜歡EFCoreMigrateMultiDatabase這是我的演示,需要更換服務IMigrationsScaffolderIMigrationsAssembly支持具有單個 dbcontext 的不同數據庫進行遷移

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM