导读:本期聚焦于小伙伴创作的《C#怎么使用MySqlConnector连接MySQL?C# EF Core MySQL配置教程实战》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#怎么使用MySqlConnector连接MySQL?C# EF Core MySQL配置教程实战》有用,将其分享出去将是对创作者最好的鼓励。

在C#项目中操作MySQL数据库时,MySqlConnector是官方推荐的高性能ADO.NET驱动,搭配EF Core可以实现对象关系映射,大幅降低数据操作的代码量。下面将从基础连接到EF Core配置逐步讲解完整实现过程。

C#怎么使用MySqlConnector连接MySQL?C# EF Core MySQL配置教程实战

一、基础环境准备

首先需要创建C#项目,这里以.NET 6控制台项目为例,然后通过NuGet安装必要的依赖包:

  • MySqlConnector:用于底层MySQL连接
  • Microsoft.EntityFrameworkCore:EF Core核心包
  • Microsoft.EntityFrameworkCore.Tools:用于执行迁移命令
  • MySqlConnector.EntityFrameworkCore:EF Core的MySQL提供程序

可以在NuGet包管理器中搜索安装,也可以通过命令行安装:

# 安装MySqlConnector
dotnet add package MySqlConnector
# 安装EF Core核心包
dotnet add package Microsoft.EntityFrameworkCore
# 安装EF Core工具包
dotnet add package Microsoft.EntityFrameworkCore.Tools
# 安装EF Core MySQL提供程序
dotnet add package MySqlConnector.EntityFrameworkCore

二、使用MySqlConnector直接连接MySQL

如果不使用EF Core,仅用MySqlConnector实现基础连接和查询,代码如下:

2.1 基础连接查询示例

using MySqlConnector;

// 数据库连接字符串,替换成自己的数据库信息
string connectionString = "Server=localhost;Port=3306;Database=test_db;Uid=root;Pwd=123456;";
// 创建连接对象
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
    try
    {
        // 打开连接
        connection.Open();
        Console.WriteLine("MySQL连接成功");
        // 创建查询命令
        string sql = "SELECT id, name, age FROM user_info";
        using (MySqlCommand command = new MySqlCommand(sql, connection))
        {
            // 执行查询获取结果集
            using (MySqlDataReader reader = command.ExecuteReader())
            {
                // 遍历结果集
                while (reader.Read())
                {
                    int id = reader.GetInt32("id");
                    string name = reader.GetString("name");
                    int age = reader.GetInt32("age");
                    Console.WriteLine($"用户id:{id},姓名:{name},年龄:{age}");
                }
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"连接或查询失败:{ex.Message}");
    }
}

2.2 插入数据示例

using MySqlConnector;

string connectionString = "Server=localhost;Port=3306;Database=test_db;Uid=root;Pwd=123456;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
    connection.Open();
    // 参数化插入语句,避免SQL注入
    string insertSql = "INSERT INTO user_info (name, age) VALUES (@name, @age)";
    using (MySqlCommand command = new MySqlCommand(insertSql, connection))
    {
        // 添加参数
        command.Parameters.AddWithValue("@name", "张三");
        command.Parameters.AddWithValue("@age", 25);
        // 执行插入,返回受影响行数
        int rows = command.ExecuteNonQuery();
        Console.WriteLine($"插入成功,受影响行数:{rows}");
    }
}

三、EF Core配置MySQL连接

使用EF Core可以实现实体类和数据库表的映射,无需手动编写SQL语句操作数据,首先定义实体类和数据库上下文。

3.1 定义实体类

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

// 对应数据库中的user_info表
[Table("user_info")]
public class UserInfo
{
    // 主键
    [Key]
    [Column("id")]
    public int Id { get; set; }

    [Column("name")]
    public string Name { get; set; }

    [Column("age")]
    public int Age { get; set; }
}

3.2 定义数据库上下文

using Microsoft.EntityFrameworkCore;

public class TestDbContext : DbContext
{
    // 定义UserInfo对应的DbSet
    public DbSet<UserInfo> UserInfos { get; set; }

    // 配置数据库连接
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // 使用MySqlConnector作为提供程序,替换成自己的连接字符串
        string connectionString = "Server=localhost;Port=3306;Database=test_db;Uid=root;Pwd=123456;";
        optionsBuilder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString));
    }

    // 可选:配置实体和表的映射规则
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        // 可以额外配置字段属性,比如长度、默认值等
        modelBuilder.Entity<UserInfo>()
            .Property(u => u.Name)
            .HasMaxLength(50);
    }
}

3.3 执行数据库迁移

定义好上下文后,需要执行迁移命令生成数据库表:

# 添加迁移文件,命名可以自定义
dotnet ef migrations add InitialCreate
# 执行迁移,创建数据库表
dotnet ef database update

3.4 EF Core增删改查操作

using System;
using System.Linq;

// 查询所有用户
using (TestDbContext context = new TestDbContext())
{
    var allUsers = context.UserInfos.ToList();
    foreach (var user in allUsers)
    {
        Console.WriteLine($"id:{user.Id},姓名:{user.Name},年龄:{user.Age}");
    }
}

// 新增用户
using (TestDbContext context = new TestDbContext())
{
    UserInfo newUser = new UserInfo
    {
        Name = "李四",
        Age = 28
    };
    context.UserInfos.Add(newUser);
    // 保存更改到数据库
    int result = context.SaveChanges();
    Console.WriteLine($"新增成功,受影响行数:{result}");
}

// 修改用户
using (TestDbContext context = new TestDbContext())
{
    // 查找id为1的用户
    UserInfo userToUpdate = context.UserInfos.FirstOrDefault(u => u.Id == 1);
    if (userToUpdate != null)
    {
        userToUpdate.Age = 26;
        context.SaveChanges();
        Console.WriteLine("修改成功");
    }
}

// 删除用户
using (TestDbContext context = new TestDbContext())
{
    UserInfo userToDelete = context.UserInfos.FirstOrDefault(u => u.Id == 2);
    if (userToDelete != null)
    {
        context.UserInfos.Remove(userToDelete);
        context.SaveChanges();
        Console.WriteLine("删除成功");
    }
}

四、常见问题说明

在实际使用中可能会遇到以下问题:

  • 连接字符串错误:检查Server、Port、Database、Uid、Pwd是否正确,确保MySQL服务已启动
  • 迁移失败:确认MySqlConnector.EntityFrameworkCore版本和EF Core核心版本匹配,避免版本冲突
  • 实体映射错误:检查[Table][Column]特性标注的表名、列名是否和数据库实际一致

如果需要连接远程MySQL数据库,只需把连接字符串中的Server替换成远程服务器IP即可,若远程连接失败,需要检查MySQL是否开启了远程访问权限,以及服务器防火墙是否开放了3306端口。

C#MySqlConnectorEF_CoreMySQL修改时间:2026-06-28 20:45:42

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。