在DbContextOptions上找不到UseMysql方法

Den*_*and 10 c# mysql entity-framework asp.net-core

我正在使用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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的依赖关系看起来像这样:

"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"
  },
Run Code Online (Sandbox Code Playgroud)

我还尝试在以下代码中使用我的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*
        }
Run Code Online (Sandbox Code Playgroud)

我试图改变我的指令

using Microsoft.EntityFrameworkCore;
Run Code Online (Sandbox Code Playgroud)

using MySQL.Data.EntityFrameworkCore;
Run Code Online (Sandbox Code Playgroud)

这有道理吗?也许?但是所有对DbContext和DbSet的引用都消失了,所以我想解决方案是各种各样的混合?

Tse*_*eng 21

你需要

using Microsoft.EntityFrameworkCore;
using MySQL.Data.EntityFrameworkCore.Extensions;
Run Code Online (Sandbox Code Playgroud)

使用依赖注入时,Oracle不遵守标准做法,因此它有点不同.标准做法是将Depedency Injection的扩展方法放入Microsoft.Extensions.DependencyInjection命名空间,该命名空间包含在大多数ASP.NET Core应用程序项目中,因此在导入包时该方法将自动可用.

  • 嘿,Oracle没有办法将他们的代码放在`Microsoft.*`namespace :)下 (2认同)

Cha*_*u A 21

如果您引用包Pomelo.EntityFrameworkCore.MySql ,请使用以下代码

 services.AddDbContextPool<AppDBContext>(options =>
        {
            var connetionString = Configuration.GetConnectionString("DefaultConnection");
            options.UseMySql(connetionString, ServerVersion.AutoDetect(connetionString));
        });
Run Code Online (Sandbox Code Playgroud)


gra*_*der 8

未来的读者。

如果您使用“MySql.Data.EntityFrameworkCore”:

我有这个:(注意,任何包含“ MySql ”的单词/短语的情况。)

在我的顶层(通常是 .exe)中,我进行 DI 配置。

csproj(顶层)

<PackageReference Include="MySql.Data.EntityFrameworkCore" Version="8.0.19" />
Run Code Online (Sandbox Code Playgroud)

带有 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"));
Run Code Online (Sandbox Code Playgroud)

注意上面UseMySQL的情况。为什么命名空间是“MySql”而“use”是“UseMySQL”(??)......如果您将头撞到屏幕上,这种不一致(与cAsE)值得注意。:)

在“较低层”(我的“数据层”)中,我向 EntityFramework Core 进行编码(但不是任何具体的具体)

csproj(数据层)(注意2.1版本......)

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.*" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="2.1.*" />
Run Code Online (Sandbox Code Playgroud)

=======================================

如果您使用的是 Pomelo.EntityFrameworkCore.MySql。(我个人认为这是一个更好的选择。)

在我的顶层(通常是 .exe)中,我进行 DI 配置。

csproj(顶层)

 <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.1.*" />
Run Code Online (Sandbox Code Playgroud)

带有 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"));
Run Code Online (Sandbox Code Playgroud)

注意上面UseMySql的 CASE 。这是一致的。因此,Pomelo.EntityFrameworkCore.MySql 的奖励点是为了确保“using (namepsace)”和 DI 注册“UseMySql”之间的一致性。

在“较低层”(我的“数据层”)中,我向 EntityFramework Core 进行编码(但不是任何具体的具体)

csproj(数据层)

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.*" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.*" />
Run Code Online (Sandbox Code Playgroud)