c# - entityframework core - switch databases

更換數據庫之後,如果舊的Migrations導致數據庫錯誤,可按照以下步驟重新生成Migrations:

1. 刪除所有existing migrations(包含:DataContextModelSnapshot), 直接文件刪除就可以。
2. 安裝要更換數據庫DataProvider的nuget package,例如:SqlServer的nuget package爲:Microsoft.EntityFrameworkCore.SqlServer。
其他數據庫請參考:https://docs.microsoft.com/en-us/ef/core/providers/?tabs=dotnet-core-cli
3. 在DataContext的OnConfiguring方法中指定要更換的數據庫(比如如下代碼中使用的SqlServer):

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlServer(@"Server=localhost;Database=mydatabase;User ID=sa;Password=password;");
}

4. 執行以下命令:

dotnet ef migrations add InitialAgain -p yourProject -s yourStartupProject

例如:如果發生以下錯誤:
System.InvalidOperationException: Services for database providers 'Microsoft.EntityFrameworkCore.Sqlite', 'Microsoft.EntityFrameworkCore.SqlServer' have been registered in the service provider. Only a single database provider can be registered in a service provider. If possible, ensure that Entity Framework is managing its service provider by removing the call to UseInternalServiceProvider. Otherwise, consider conditionally registering the database provider, or maintaining one service provider per database provider.
則說明你指定了多次database providers,刪掉你不想指定的即可(例如以上錯誤信息中的Microsoft.EntityFrameworkCore.Sqlite)。
一般你會在Startup.cs中指定DataContext,例如以下代碼, 註釋掉,或者改成你需要的數據庫即可,請注意安裝相關的nuget packages。

services.AddDbContext<DataContext>(opt =>
{
    opt.UseLazyLoadingProxies();
    opt.UseSqlServer(Configuration.GetConnectionString("SqlServerConnection"));
});

 

發佈了134 篇原創文章 · 獲贊 20 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章