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应用程序项目中,因此在导入包时该方法将自动可用.
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)
未来的读者。
如果您使用“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)
归档时间: |
|
查看次数: |
12833 次 |
最近记录: |