我有一个使用LocalDB的简单ASP.Net Core / Entity Framework Core项目。它可以在Windows上编译并正常运行。
我想在Windows和Linux上构建并运行相同的项目。但是Linux不支持LocalDB。因此,我需要将项目配置为改为使用mySql-但仅适用于Linux。
问:如何配置项目,以便可以在Windows上使用LocalDB,而在Linux上使用mySql?
这是我到目前为止尝试过的:
创建了一个空的mySql数据库,并授予了对mySql用户的访问权限。
在appsettings.json
中创建了mySql连接字符串:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(LocalDb)\\MSSQLLocalDB;Database=ManageCarDB;Trusted_Connection=True;MultipleActiveResultSets=true",
"mySqlConnection": "Server=localhost;port=3306;database=ManageCarDb;uid=dotnetuser;password=dotnetuser"
},...
<= I've defined two different connection strings: one for LocalDB, one for MySql
已更新Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
string env = System.Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
string connectionString;
if (!string.IsNullOrEmpty(env) && env.Equals("Linux"))
{
connectionString = Configuration.GetConnectionString("mySqlConnection");
services.AddDbContext<ApplicationDbContext>(options =>
options.UseMySQL(connectionString));
}
else
{
connectionString = Configuration.GetConnectionString("DefaultConnection");
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(connectionString));
}
<=启动将有条件地调用MySql连接字符串/ MySQL数据提供程序或default / LocalDB
在Linux上:
dotnet restore
dotnet ef migrations add newMigration -c ApplicationDbContext -v
<=一切正常
试图更新数据库:
dotnet ef database update
<= 错误:表'ManageCarDb .__ EFMigrationsHistory'不存在
问:鉴于我想要针对两个EF环境的一个项目,我是否采取了正确的步骤?
还是应该采用其他方法?
答案 0 :(得分:2)
您应该使用`Pomelo.EntityFrameworkCore.MySql而不是Oracle的MySql库。
我使用Pomelo.EntityFrameworkCore.MySql
,它在我的项目中效果很好。
Oracle的MySql库不像我尝试的那样支持迁移。该库面临几个问题
注意:我正在为Oracle网站找到一个讨论此问题的链接
Error: The method or operation is not implemented. while scaffolding MYSQL Database