我正在使用linux上的dotnet核心,我正在尝试使用连接字符串配置我的DbContext到mysql Server。
我的DbContext看起来像这样:
using Microsoft.EntityFrameworkCore;
using Models.Entities;
namespace Models {
public class SomeContext : DbContext
{
//alot of dbSets...
public DbSet<SomeEntity> SomeDbSet { get; set; }
public EsportshubContext(DbContextOptions<SomeContext> options) : base(options) {
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMysql //Cannot find this method
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//using modelBuilder to map some relationships
}
}
}
我的依赖关系看起来像这样:
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.0",
"type": "platform"
},
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Configuration.CommandLine": "1.0.0",
"Microsoft.AspNetCore.Mvc":"1.0.0",
"Microsoft.EntityFrameworkCore": "1.0.1",
"MySql.Data.Core": "7.0.4-ir-191",
"MySql.Data.EntityFrameworkCore": "7.0.4-ir-191"
},
我还试图在我的Startup.cs中使用以下代码中的mysql服务器
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNetCore.NewDb;Trusted_Connection=True;";
services.AddDbContext<EsportshubContext>(options => options.UseMysql); //Cannot find UseMysql*
}
我试图改变我的指令
using Microsoft.EntityFrameworkCore;
到
using MySQL.Data.EntityFrameworkCore;
哪个有道理?也许?但是所有对DbContext和DbSet的引用都消失了,所以我认为解决方案是各种各样的混合?
答案 0 :(得分:19)
你需要
Just EQ
Oracle在使用依赖注入时不遵守标准做法,因此它有点不同。标准做法是将Depedency Injection的扩展方法放入<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:com/resources/messages</value>
<value>classpath:com/resources</value>
</list>
</property>
</bean>
命名空间,该命名空间包含在大多数ASP.NET Core应用程序项目中,因此在导入包时该方法将自动可用。
答案 1 :(得分:1)
未来的读者。
如果您使用的是“ MySql.Data.EntityFrameworkCore”:
我有这个:(请注意,包含“ MySql ”的 任何 单词/短语的cAsE)。
在我进行DI配置的顶层(通常是.exe)中。
csproj(顶层)
<PackageReference Include="MySql.Data.EntityFrameworkCore" Version="8.0.19" />
带有DI的CS文件
using Microsoft.EntityFrameworkCore;
using MySql.Data.EntityFrameworkCore;
///where servColl is IServiceCollection
servColl.AddDbContext<MyCoolDbContext>(options => options.UseMySQL("server=localhost;database=library;user=mysqlschema;password=mypassword"));
在使用MySQL 的情况下注意。为什么命名空间是“ MySql”,为什么“ use”是“ UseMySQL”(??)……这种不一致(与cAsE)值得注意,如果您将头撞在屏幕上。 :)
在“下层”(我的“数据层”)中,我在其中编码到EntityFramework Core(但没有任何具体的具体说明)
csproj(数据层)(请注意2.1版本....)
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.*" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="2.1.*" />
====================================
如果您使用的是Pomelo.EntityFrameworkCore.MySql。 (我个人认为这是一个更好的选择。)
在我进行DI配置的顶层(通常是.exe)中。
csproj(顶层)
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.1.*" />
带有DI的CS文件
using Microsoft.EntityFrameworkCore;
using Pomelo.EntityFrameworkCore.MySql.Infrastructure;
///where servColl is IServiceCollection
servColl.AddDbContext<MyCoolDbContext>(options => options.UseMySql("server=localhost;database=library;user=mysqlschema;password=mypassword"));
在 UseMySql 的情况下注意。这是一致的。因此,Pomelo.EntityFrameworkCore.MySql的奖励积分是“使用(namepsace)”和DI注册“ UseMySql”之间的一致性。
在“下层”(我的“数据层”)中,我在其中编码到EntityFramework Core(但没有任何具体的具体说明)
csproj(数据层)
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.*" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.*" />
答案 2 :(得分:1)
如果您要引用包 Pomelo.EntityFrameworkCore.MySql
,请使用以下代码 services.AddDbContextPool<AppDBContext>(options =>
{
var connetionString = Configuration.GetConnectionString("DefaultConnection");
options.UseMySql(connetionString, ServerVersion.AutoDetect(connetionString));
});
答案 3 :(得分:0)
如果您没有使用MySQL.Data.EntityFrameworkCore
软件包。您可能在EntityFramework Core上将Pomelo.EntityFrameworkCore.MySql
包用于MySql。
如果是,请添加以下行:
using Microsoft.EntityFrameworkCore;
using Pomelo.EntityFrameworkCore;