C#-EF Core使用MySQL数据库

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS AI 助手,专业版
简介: 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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
关系型数据库 Java MySQL
C#winform中使用SQLite数据库
C#winform中使用SQLite数据库
990 3
C#winform中使用SQLite数据库
|
SQL 缓存 大数据
C#高效处理大数据的批次处理,以及最好的数据库设计
C#高效处理大数据的批次处理,以及最好的数据库设计
671 0
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(下)
本文接续前文,深入讲解了在Windows环境下使用C#和ADO.NET操作南大通用GBase 8s数据库的方法。通过Visual Studio 2022创建项目,添加GBase 8s的DLL引用,并提供了详细的C#代码示例,涵盖数据库连接、表的创建与修改、数据的增删查改等操作,旨在帮助开发者提高数据库管理效率。
|
SQL 存储 关系型数据库
C#一分钟浅谈:使用 ADO.NET 进行数据库访问
【9月更文挑战第3天】在.NET开发中,与数据库交互至关重要。ADO.NET是Microsoft提供的用于访问关系型数据库的类库,包含连接数据库、执行SQL命令等功能。本文从基础入手,介绍如何使用ADO.NET进行数据库访问,并提供示例代码,同时讨论常见问题及其解决方案,如连接字符串错误、SQL注入风险和资源泄露等,帮助开发者更好地利用ADO.NET提升应用的安全性和稳定性。
885 6
|
关系型数据库 MySQL 大数据
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
1115 2
|
存储 开发框架 .NET
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
293 0
|
SQL 关系型数据库 数据库
EF Core连接PostgreSQL数据库
EF Core连接PostgreSQL数据库
442 0
|
SQL 存储 Oracle
C#利用IDbCommand实现通用数据库脚本执行程序
C#利用IDbCommand实现通用数据库脚本执行程序
|
SQL 开发框架 .NET
【Entity Framework】聊一聊EF如何使用数据库函数
【Entity Framework】聊一聊EF如何使用数据库函数
393 0

推荐镜像

更多