在DbContextOptions上找不到UseMysql方法

时间:2016-10-15 13:58:55

标签: 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
        }
    }
}

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

"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的引用都消失了,所以我认为解决方案是各种各样的混合?

4 个答案:

答案 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;