C#-EF Core使用MySQL数据库

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
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 ('李四',
68 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
9月前
|
开发框架 前端开发 .NET
C# ASP.NET Core开发学生信息管理系统(一)
C# ASP.NET Core开发学生信息管理系统(一)
279 0
|
10天前
|
SQL 存储 数据库连接
C#编程与数据库交互的实现
【4月更文挑战第20天】C#与数据库交互是现代软件开发的关键,涉及数据库连接、数据操作和访问方式。使用ADO.NET建立连接,执行SQL实现读取、插入、更新和删除数据。可通过直接SQL或数据访问对象进行操作。注意性能优化,使用连接池,处理异常,确保安全,以提升应用性能和稳定性。
|
10天前
|
存储 SQL 数据库
C# 将 Word 转文本存储到数据库并进行管理
C# 将 Word 转文本存储到数据库并进行管理
|
1月前
|
存储 SQL 数据库
C# 将 Word 转文本存储到数据库并进行管理
C# 将 Word 转文本存储到数据库并进行管理
|
1月前
|
SQL 存储 关系型数据库
C# .NET面试系列十:数据库概念知识
#### 1. 为什么要一定要设置主键? 设置主键是数据库设计中的一个重要概念,有几个主要原因: 1、唯一性 ```c# 主键必须保证表中的每一行都有唯一的标识。这样可以避免数据冗余和不一致性。如果没有主键或者主键不唯一,就可能出现数据混乱或错误。 ``` 2、查询性能 ```c# 数据库系统通常会使用主键来加速数据检索。主键通常会被索引,这样可以更快速地找到特定行的数据,提高查询效率。 ``` 3、关联性 ```c# 主键常常用于建立表与表之间的关系。在关系数据库中,一个表的主键通常与其他表中的外键建立关联,这种关系对于数据的一致性和完整性非常重要。 ``` 4、数据完
131 1
C# .NET面试系列十:数据库概念知识
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
65 0
|
1月前
|
开发框架 安全 .NET
C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!
<h2>集合、异常、泛型、LINQ、委托、EF! #### 1. IList 接口与 List 的区别是什么? IList 接口和 List 类是C#中集合的两个相关但不同的概念。下面是它们的主要区别: <b>IList 接口</b> IList 接口是C#中定义的一个泛型接口,位于 System.Collections 命名空间。它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。 ```c# IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。 由于是接口,它只定义了成员的契约,而不提供具体的实现。类似于 IEnumera
159 2
|
3月前
|
C# 数据库 数据库管理
C#使用Poco链接SQLite数据库配置文件和错误的解决
C#使用Poco链接SQLite数据库配置文件和错误的解决
24 1
|
4月前
|
SQL 关系型数据库 MySQL
【Unity 3D】C#从mysql数据库中读取、封装SQL语句(附源码)
【Unity 3D】C#从mysql数据库中读取、封装SQL语句(附源码)
105 0