C#-EF Core使用MySQL数据库

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Entity Framework Core (EF Core)是微软推荐的基于.NET Core 的应用程序数据访问技术。开源,轻量级,可扩展并且支持跨平台开发。EF Core是一种对象关系映射器(ORM),通过应用程序实体对象和关系数据库中的数据的映射,使得开发人员能够以面向对象的方式处理数据。

简介

Entity Framework Core (EF Core)是微软推荐的基于.NET Core 的应用程序数据访问技术。开源,轻量级,可扩展并且支持跨平台开发。EF Core是一种对象关系映射器(ORM),通过应用程序实体对象和关系数据库中的数据的映射,使得开发人员能够以面向对象的方式处理数据。

使用

在项目里头安装EF Core和MySQL相关的NuGet包:Microsoft.EntityFrameworkCorePomelo.EntityFrameworkCore.MySql ,如果你使用的是其他数据库,那么就换成其他的数据库相关的包即可。

这里创建的是一个web项目,桌面项目其实大同小异,创建一个类继承DbContext,DbContext 是 EF 中非常重要的一个组件,它拥有数据库的会话连接,数据查询,修改保存数据,缓存,事务管理等等作用。

比如我这里创建的是这样的:

usingAcg.Models;
usingMicrosoft.EntityFrameworkCore;
namespaceAcg.DataBase{
publicclassAcgbiuDbContext : DbContext    {
publicDbSet<TopicModel>Acgbiu_Topic { get; set; }
publicDbSet<TopicRelationshipsModel>Acgbiu_Topic_Relationships { get; set; }
publicDbSet<TermModel>Acgbiu_Terms { get; set; }
publicDbSet<FocusModel>Acgbiu_Focus { get; set; }
publicAcgbiuDbContext(DbContextOptions<AcgbiuDbContext>options) : base(options)
        {
this.Database.Migrate();
        }
protectedoverridevoidOnModelCreating(ModelBuildermodelBuilder)
        {
modelBuilder.Entity<TopicModel>();
modelBuilder.Entity<TopicRelationshipsModel>();
modelBuilder.Entity<FocusModel>();
        }
    }
}

创建实体类,对应数据库中的表结构,比如我这里的TopicModel

usingSystem.ComponentModel.DataAnnotations;
usingSystem.ComponentModel.DataAnnotations.Schema;
namespaceAcg.Models{
    [Table("acgbiu_topic")]
publicclassTopicModel    {
        [Key]
publicinttopic_id { get; set; }
publicstringname { get; set; }
publicstringdescription { get; set; }
publicstringicon { get; set; }
publicstringremark { get; set; }
    }
}

使用依赖注入的方式使用刚才创建的AcgbiuDbContext ,在Startup.cs中注册AcgbiuDbContext。

publicvoidConfigureServices(IServiceCollectionservices)
        {
services.AddControllersWithViews();
stringconnectStr=$"server = 服务器地址; port=端口号;database = 使用的数据库; uid = 数据库连接用户名; password = 密码";
services.AddDbContext<AcgbiuDbContext>(oprions=>oprions.UseMySql(connectStr, newMySqlServerVersion(newVersion(10,5,6))));
        }

以一个控制器类的代码为例,看下数据的增删改查。

构造函数注入的方式,获取我们刚才注册的AcgbiuDbContext,然后就可以使用了。

//获取表的所有数据AcgbiuDbContext.Acgbiu_Topic.ToList();
//添加数据AcgbiuDbContext.Acgbiu_Topic.Add(topicModel);
//更新数据AcgbiuDbContext.Acgbiu_Topic.Update(topicModel);
//删除数据AcgbiuDbContext.Acgbiu_Topic.Remove(topic);
//异步的方式将前面的增删改,保存到数据库中awaitAcgbiuDbContext.SaveChangesAsync();
usingAcg.DataBase;
usingAcg.Models;
usingMicrosoft.AspNetCore.Mvc;
usingMicrosoft.Extensions.Configuration;
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Threading.Tasks;
namespaceAcg.Controllers{
    [Route("Api/[controller]/[action]/{id?}")]
publicclassApiTopicController: ControllerBase    {
privatereadonlyIConfigurationConfiguration;
privatereadonlyAcgbiuDbContextAcgbiuDbContext;
publicApiTopicController(IConfigurationconfiguration, AcgbiuDbContextacgbiuDbContext) 
        {
Configuration=configuration;
AcgbiuDbContext=acgbiuDbContext;
        }
        [HttpGet]
publicasyncTask<IActionResult>Topics(intid)
        {
List<TopicModel>topicModels=newList<TopicModel>();
topicModels=AcgbiuDbContext.Acgbiu_Topic.ToList();
if (id!=0) 
            {
TopicModeltopicModel=topicModels.Find(x=>x.topic_id==id);
returnnewJsonResult(topicModel);
            }
returnnewJsonResult(topicModels);
        }
        [HttpPost]
publicasyncTask<IActionResult>Topics([FromBody] TopicModeltopicModel)
        {
boolres=true;
AcgbiuDbContext.Acgbiu_Topic.Add(topicModel);
intnum=awaitAcgbiuDbContext.SaveChangesAsync();
if (num<=0)
            {
res=false;
            }
returnnewJsonResult(num);
        }
        [HttpPut]
publicasyncTask<IActionResult>Topics(intid,[FromBody]TopicModeltopicModel)
        {
boolres=true;
if (id!=topicModel.topic_id) 
            {
returnBadRequest();
            }
AcgbiuDbContext.Acgbiu_Topic.Update(topicModel);
intnum=awaitAcgbiuDbContext.SaveChangesAsync();
returnnewJsonResult(num);
        }
        [HttpDelete]
publicasyncTask<IActionResult>Topics(longid)
        {
vartopic=awaitAcgbiuDbContext.Acgbiu_Topic.FindAsync(id);
if (topic==null)
            {
returnNotFound();
            }
AcgbiuDbContext.Acgbiu_Topic.Remove(topic);
awaitAcgbiuDbContext.SaveChangesAsync();
returnNoContent();
        }
        [HttpGet]
publicasyncTask<IActionResult>TopicTerms(intid)
        {
if (id>0)
            {
varterms=AcgbiuDbContext.Acgbiu_Topic_Relationships.Join(AcgbiuDbContext.Acgbiu_Terms, x=>x.term_id, y=>y.term_id, (x, y) =>new                {
x.id,
x.topic_id,
x.term_id,
y.name,
y.slug                }).Where(p=>p.topic_id==id).ToList();
returnnewJsonResult(terms);
            }
else            {
varterms=AcgbiuDbContext.Acgbiu_Topic_Relationships.Join(AcgbiuDbContext.Acgbiu_Terms, x=>x.term_id, y=>y.term_id, (x, y) =>new                {
x.id,
x.topic_id,
x.term_id,
y.name,
y.slug                }).ToList();
returnnewJsonResult(terms);
            }
        }
        [HttpPost]
publicasyncTask<IActionResult>TopicTerms([FromBody] TopicRelationshipsModeltopicRelationshipsModel)
        {
try            {
if (topicRelationshipsModel==null||topicRelationshipsModel.topic_id==0||topicRelationshipsModel.term_id==0)
                {
returnBadRequest();
                }
boolisExist=AcgbiuDbContext.Acgbiu_Topic_Relationships.Any(x=>x.topic_id==topicRelationshipsModel.topic_id&&x.term_id==topicRelationshipsModel.term_id);
if (!isExist) 
                {
awaitAcgbiuDbContext.Acgbiu_Topic_Relationships.AddAsync(topicRelationshipsModel);
awaitAcgbiuDbContext.SaveChangesAsync();
                }
else                {
returnBadRequest();
                }
            }catch(Exceptionex)
            {
returnBadRequest();
            }
returnNoContent();
        }
    }
}

参考

Entity Framework Core 概述 – EF Core | Microsoft Learn

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
137 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
17天前
|
SQL 存储 关系型数据库
C#一分钟浅谈:使用 ADO.NET 进行数据库访问
【9月更文挑战第3天】在.NET开发中,与数据库交互至关重要。ADO.NET是Microsoft提供的用于访问关系型数据库的类库,包含连接数据库、执行SQL命令等功能。本文从基础入手,介绍如何使用ADO.NET进行数据库访问,并提供示例代码,同时讨论常见问题及其解决方案,如连接字符串错误、SQL注入风险和资源泄露等,帮助开发者更好地利用ADO.NET提升应用的安全性和稳定性。
48 6
|
1月前
|
关系型数据库 Java MySQL
C#winform中使用SQLite数据库
C#winform中使用SQLite数据库
45 3
C#winform中使用SQLite数据库
|
1月前
|
关系型数据库 MySQL 大数据
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
148 2
|
1月前
|
存储 开发框架 .NET
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
|
1月前
|
SQL 关系型数据库 数据库
EF Core连接PostgreSQL数据库
EF Core连接PostgreSQL数据库
23 0
|
3月前
|
SQL 开发框架 .NET
【Entity Framework】聊一聊EF如何使用数据库函数
【Entity Framework】聊一聊EF如何使用数据库函数
41 0
|
3月前
|
SQL 存储 开发框架
【Entity Framework】EF中的增删改查
【Entity Framework】EF中的增删改查
81 0
|
4月前
|
SQL 存储 Oracle
C#利用IDbCommand实现通用数据库脚本执行程序
C#利用IDbCommand实现通用数据库脚本执行程序
|
4月前
|
存储 SQL 数据库
C# 将 Word 转文本存储到数据库并进行管理
C# 将 Word 转文本存储到数据库并进行管理
114 2