在 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 上找不到符号
为啥我把vs2012安装到电脑上了 显示安装成功 但是在电脑上找不到这个程序?
在 Startup.cs 中添加 DbContextOptions 未注册数据存储
C# 无法转换为“Microsoft.EntityFrameworkCore.DbContextOptions”[关闭]