【问题标题】:Cannot find the UseMysql method on DbContextOptions在 DbContextOptions 上找不到 UseMysql 方法
【发布时间】: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 的引用都消失了,所以我想解决方案是混合的??

【问题讨论】:

    标签: c# mysql entity-framework asp.net-core


    【解决方案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;
        

        【讨论】:

          猜你喜欢
          • 2021-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-31
          • 2019-07-14
          • 1970-01-01
          相关资源
          最近更新 更多