dotnet core webapi EF 连接mysql数据库
目录
1、安装 MySQL 的 EF Core 提供程序
2、创建 DbContext 和模型类
3、在 Program.cs 或 Startup.cs 中配置服务
4、在 appsettings.json 中配置连接字符串
5、使用示例
6、异常处理
在 .NET Core 中使用 Entity Framework Core (EF Core) 连接 MySQL 数据库。
1、安装 MySQL 的 EF Core 提供程序
使用 NuGet 安装 Pomelo.EntityFrameworkCore.MySql(推荐),它是社区支持最广泛的 MySQL EF Core 提供程序:
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Pomelo.EntityFrameworkCore.MySql
2、创建 DbContext
和模型类
public class User
{public int Id { get; set; }public string Name { get; set; }
}
示例 DbContext:
public class MyDbContext : DbContext
{public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) {}public DbSet<User> Users { get; set; }
}
3、在 Program.cs
或 Startup.cs
中配置服务
var builder = WebApplication.CreateBuilder(args);// 配置 MySQL 数据库连接
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<MyDbContext>(options =>options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)));var app = builder.Build();
4、在 appsettings.json
中配置连接字符串
{"ConnectionStrings": {"DefaultConnection": "server=localhost;port=3306;database=testdb;user=root;password=yourpassword;"}
}
5、使用示例
// 添加数据
using (var context = new SchoolDbContext())
{var student = new Student{Name = "张三",Age = 18,Grade = "高三"};context.Students.Add(student);await context.SaveChangesAsync();
}// 查询数据
using (var context = new SchoolDbContext())
{var students = await context.Students.Where(s => s.Age >= 18).ToListAsync();
}// 更新数据
using (var context = new SchoolDbContext())
{var student = await context.Students.FirstOrDefaultAsync(s => s.Id == 1);if (student != null){student.Name = "李四";await context.SaveChangesAsync();}
}// 删除数据
using (var context = new SchoolDbContext())
{var student = await context.Students.FirstOrDefaultAsync(s => s.Id == 1);if (student != null){context.Students.Remove(student);await context.SaveChangesAsync();}
}
6、异常处理
Method 'get_LockReleaseBehavior' in type 'Pomelo.EntityFrameworkCore.MySql.Migrations.Internal.MySqlHistoryRepository' from assembly 'Pomelo.EntityFrameworkCore.MySql, Version=8.0.3.0, Culture=neutral, PublicKeyToken=2cc498582444921b' does not have an implementation.
这个报错是由于Pomelo.EntityFrameworkCore与Microsoft.EntityFrameworkCore版本不匹配导致。Pomelo.EntityFrameworkCore.MySql 8.x 版本中未实现 Microsoft.EntityFrameworkCore 9.x 中的 get_LockReleaseBehavior 方法。
解决办法,升级Pomelo.EntityFrameworkCore,或者降级Microsoft.EntityFrameworkCore。