在 DbContextOptions 上找不到 UseMysql 方法

Posted

技术标签:

【中文标题】在 DbContextOptions 上找不到 UseMysql 方法【英文标题】:Cannot find the UseMysql method on DbContextOptions 【发布时间】:2017-02-24 21:00:46 【问题描述】:

我正在使用 linux 上的 dotnet 核心,我正在尝试使用连接字符串配置我的 DbContext 到 mysql 服务器。

我的 DbContext 看起来像这样:

using Microsoft.EntityFrameworkCore;
using Models.Entities;

namespace Models 
    public class SomeContext : DbContext
    
        //alot of dbSets...
        public DbSet<SomeEntity> SomeDbSet  get; set; 

        public SomeContext(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<SomeContext>(options => options.UseMysql); //Cannot find UseMysql*
        

我试图改变我的指令

using Microsoft.EntityFrameworkCore;

using MySQL.Data.EntityFrameworkCore;

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

【问题讨论】:

【参考方案1】:

你需要

using Microsoft.EntityFrameworkCore;
using MySQL.Data.EntityFrameworkCore.Extensions;

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

【讨论】:

您如何确定 MySQL.Data.EntityFrameworkCore.Extensions 正是您必须使用的“使用语句”?? 嘿,Oracle 不可能将他们的代码放在Microsoft.* 命名空间下:) @IvanStoev:它不是任何特定于框架的代码,只是用于注入/注册 Mysql 提供程序的扩展方法,所以 Microsoft.Extension.DependencyInjection 非常适合它,因为代码是 非常具体在 (ASP).NET Core 中引入的依赖注入 @DenLilleMand:将扩展方法放在名为 .Extensions 的命名空间中是一种常见的命名约定,因此它们可以按需导入或排除。 @Tseng 我只是在开玩笑。【参考方案2】:

如果您引用包 Pomelo.EntityFrameworkCore.MySql

,请使用以下代码
 services.AddDbContextPool<AppDBContext>(options =>
        
            var connetionString = Configuration.GetConnectionString("DefaultConnection");
            options.UseMySql(connetionString, ServerVersion.AutoDetect(connetionString));
        );

【讨论】:

【参考方案3】:

未来的读者。

如果你使用的是“MySql.Data.EntityFrameworkCore”:

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

在我进行 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"));

UseMySQL 的 CASE 上方的注意事项。为什么命名空间是“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 的 CASE 上方的注意事项。这是一致的。因此,Pomelo.EntityFrameworkCore.MySql 的加分是“使用(namepsace)”和 DI 注册“UseMySql”之间的一致性。

在“下层”(我的“数据层”)中,我编码到 EntityFramework Core(但不是任何具体的具体)

csproj(数据层)

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.*" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.*" />

【讨论】:

【参考方案4】:

如果你没有使用MySQL.Data.EntityFrameworkCore 包。您可以在 EntityFramework Core 上为 MySql 使用 Pomelo.EntityFrameworkCore.MySql 包。

如果是,请添加以下行:

using Microsoft.EntityFrameworkCore;
using Pomelo.EntityFrameworkCore;

【讨论】:

以上是关于在 DbContextOptions 上找不到 UseMysql 方法的主要内容,如果未能解决你的问题,请参考以下文章

科尔多瓦 android 构建失败,在 Windows 上找不到符号

u盘在Linux下怎么挂载,插上去找不到。

为啥我把vs2012安装到电脑上了 显示安装成功 但是在电脑上找不到这个程序?

在 Startup.cs 中添加 DbContextOptions 未注册数据存储

vmware10设置u盘启动后找不到映像文件怎么办

C# 无法转换为“Microsoft.EntityFrameworkCore.DbContextOptions”[关闭]