我想从使用SQL Server切换到MySQL。我已经为SQL Server创建了迁移,并将其应用于DB。我添加了Pomelo MySQL软件包,现在想为MySQL DB创建迁移。我的问题是,在尝试使用Add Mogration命令时,我会在软件包管理器控制台中收到错误。
- 是A.Net Core 2.2项目
- pomelo.entityframeworkcore.mysql 2.2.0已添加到项目
启动/配置服务
services.AddDbContext<ApplicationDbContext>(options => options.UseMySql(Configuration.GetConnectionString("DefaultConnection"),
mySqlOptions => { mySqlOptions.ServerVersion(new Version(8, 0, 16), ServerType.MySql); }));
csproj
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.2.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.4" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.3" PrivateAssets="All" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.2.0" />
</ItemGroup>
ApplicationDbContext类
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySql("Server=localhost;Database=myDbUid=myUserId;");
}
尝试添加迁移时会收到以下错误。"已经添加了具有相同密钥的项目。密钥:pomelo.entityframeworkcore.mysql.infrastructure.internal.mysqloptionsextension"这个错误与我以前对MS SQL Server的迁移有任何关系吗?任何帮助将不胜感激。
我遇到了同样的问题。对我来说,答案是从我的上下文类中删除OnConfiguring()
方法。
我有两个项目 - 一个包含DB代码和迁移的项目,另一个是ASP.NET核心Web项目以查看数据。
我的Web项目中有以下内容:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<EFCoreExampleContext>(o => o.UseMySql("server=etc..."));
}
在我的数据库项目中,我在dbcontext衍生的类中有一个:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySql("server=etc...");
}
即使我使用的是Update-Database -Project MyDbProj
,它也使用了另一个项目中的连接字符串。如果我从startup.cs中删除了AddDbContext
线,则我的错误只是有不同的错误。删除OnConfiguring
方法是使其工作的唯一方法。