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"));
});
发布了132 篇原创文章 · 获赞 20 · 访问量 30万+

猜你喜欢

转载自blog.csdn.net/yuxuac/article/details/104083065
今日推荐