Net Core中使用EF Core连接Mysql数据库

这篇具有很好参考价值的文章主要介绍了Net Core中使用EF Core连接Mysql数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Entity Framework Core的前身是微软提供并主推的ORM框架,简称EF,其底层是对ADO.NET的封装。EF支持SQLServer、MYSQL、Oracle、Sqlite等所有主流数据库。
首先是使用时的几个模式的整理及其理解:

  1. Code First:根据代码自动创建数据库表结构甚至是数据库,可以支持多库开发,代码较少冗余,由于会自动更改数据库,如果有在实体类中自定义了字段,不希望在数据库中创建此字段(有时偷懒,不想定义ViewModel会这样做),还需要自己实现单独的生成代码。这就复杂了。
  2. DB First:根据现有的数据库结构生成模型类或实体类,这种适合数据库结构比较稳定的产品,数据库结构较大,表较多,甚至多人开发时频繁变动各自都要去生成太容易出错。同样偷懒模式下会删除字段。
  3. Model First:这种有可视化的模型设计,也就是Edm文件,可以利用VS等工具快速生成数据库脚本,类似Code Fist,只不过能可视化编写模式,需要完全了解数据库结构,貌似现在的NET Core时代没有这玩意了。
  4. 灵活的模式:这个算是我自加的,我称之为灵活的模式,就是DB和Code分开来实现,可以由不同的人来协作完成,更适合团队协作,DB由A来完成,Code由B来完成,甚至更多的人来参与,当然这个也会有一个大问题就是可能实体Code和DB不能很好的同步更新。
    我这里基于第四种灵活的模式来实现,DB和Code分开编写。分三步走。

第一步:引入EF
VS中NuGet需要添加两个引用包,当然你也可以用NuGet的包管理——程序包管理器控制台安装
Microsoft.EntityFrameworkCore 和 Pomelo.EntityFrameworkCore.MySql
当然在.NetCore中配置文件已Json的方式配置,你还得引入读取配置相关的包
Microsoft.Extensions.Configuration.Json

第二步:创建数据上下文DbContext
首先,什么是EF Core的数据上下文,建议参考下文章:https://www.cnblogs.com/Alex80/p/13413791.html。说得非常明白。
然后,我们来创建一个数据上下文MyDbContext类,继承自Microsoft.EntityFrameworkCore.DbContext。我们需要配置上数据库连接:在构造函数中指定需要读取的配置文件,并且重写OnConfiguring方法,在其中读取配置文件中我们配置的连接字符串,我这里读取的是appsettings.json配置文件中的名为Default的配置。
配置文件的Mysql连接字符串类似如下:

appsettings.json中的Mysql连接字符串
{
  "ConnectionStrings": {
    "Default": "Server=localhost;Database=ct_threeview;charset=utf8;uid=root;pwd=0b85232f9ebda56fc8a1f54f74383aF8a4055e570bb36cbb5;port=3506;"
  }
}

MyDbContext类中的主要代码如下,其中Test1,Study,Series就是我们的实体类,是和数据库中的表一一对应的。

Net Core中使用EF Core连接Mysql数据库

实体类是我们自己项目中手动添加的类,Study表实体类参考如下,
可以通过特性Table特性标识实体对应的是数据库中的哪个表
可以通过Key特性来标识哪个字段是主键
可以通过Column特性来标识对应数据库表中的字段是哪个
Net Core中使用EF Core连接Mysql数据库

到这里,真个的EF Core的引入就算完了,后面我们就可以开始使用了,这里我贴几个常规操作的代码,更多的大家可以参考微软官网或自行百度。

添加操作
        /// <summary>
        /// 这里是添加操作
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public Study Insert(Study entity)
        {
            using (MyDbContext db = new MyDbContext())
            {
                db.Study.Add(entity);
                db.SaveChanges();
                //entity.Id= db.Entry(entity).Entity.Id;//返回插入的记录并注入到userEntity,关键是这句
                return entity;
            }
        }
单个表部分字段更新操作
        public void UpdateNote(int studyId,string Note)
        {
            using (MyDbContext db = new MyDbContext())
            {
                var study = new Study() { Id = studyId, Notes = Note,modify_time=DateTime.Now };
                db.Study.Attach(study);
                db.Entry<Study>(study).Property("Notes").IsModified = true;
                db.Entry<Study>(study).Property("modify_time").IsModified = true;
                db.SaveChanges();
            }
        }
多表联查操作
        public List<PatientDataListModel> QueryAllData()
        {
            using (MyDbContext db = new MyDbContext())
            {
                var query = from a in db.Study
                            join b in db.Series on a.Id equals b.Study_Id
                            select new PatientDataListModel
                            {
                                StudyId = a.Id,
                                StudyInstanceUID = a.StudyInstanceUID,
                                StudyDate = a.StudyDate,
                                Modality = a.Modality,
                                StudyFilePath = a.StudyFilePath,
                                Notes=a.Notes,
                                PatientName = a.PatientName,
                                PatientID = a.PatientID,
                                PatientSex = a.PatientSex,
                                Frames = b.Frames,
                                SeriesId = b.Id,
              
使用事务的操作
            List<Sop> List = new List<Sop>(); ; 
            using (MyDbContext db = new MyDbContext())
            {
                //查询数据
                IQueryable<Sop>  query = db.Sop.FromSqlRaw($"select * from sop where Series_Id in (select Id from series where Study_Id = {studyId})");
                List = query.ToList();
                using (var transaction =db.Database.BeginTransaction())
                {
                    int effectRow = 0;
                    try
                    {

                        effectRow =db.Database.ExecuteSqlRaw(@"delete from sop where Series_Id in (
                                select Id from series where Study_Id = " + studyId + @")");
                        //transaction.CreateSavepoint("BeforeDelete"); //可以创建回滚点;出错后可以指定DB操作回滚到此前
                        db.Database.ExecuteSqlRaw(@"delete from series where Id=" + studyId);
                        //transaction.CreateSavepoint("BeforeDelete2"); //可以打开此代码,这里是创建的还原点2
          

当然,针对MyDbContext,我们也可以使用在Startup.cs注册,使用IOC的方式去使用。这种资料网上也非常多。
最后,在项目调试时,如果想实时查看EF 生成的SQL语句确实不方便,不像SqlSugar那样有一个tosql方法能直接看到。我目前没有找到很好的方法,参考网上其他人给出方案,就是在VS的控制台来输出SQL语句,当然,我们首先需要引入微软的官方日志组件Microsoft.Extensions.Logging.Debug。
然后再数据上下文(这里是MyDBContext)类中New一个日志工厂,在OnConfiguring方法中添加日志组件,这样我们在调试时就能在VS的调试输出中看到生成的SQL语句。
Net Core中使用EF Core连接Mysql数据库

EFCore逆向工程——生成实体类
如果想逆向根据DB的表结构来生成实体类,这里需要借助与微软提供的包:Microsoft.EntityFrameworkCore.Tools
首先在NuGet中引入Microsoft.EntityFrameworkCore.Tools,然后VS中菜单选择工具——》NuGet包管理器——》程序包管理器控制台。在包管理器控制台输入如下命令:
Scaffold-DbContext 'Server=localhost;Database=您的数据库名;charset=utf8;uid=账号;pwd=密码;port=端口;' Pomelo.EntityFrameworkCore.MySql -OutputDir "输出的目录文件夹"
OutputDir 如果不提供的话会将实体类生成在项目根目录下,看个人需求。文章来源地址https://www.toymoban.com/news/detail-821498.html

到了这里,关于Net Core中使用EF Core连接Mysql数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • .NET Core/.NET6 使用DbContext 连接数据库,SqlServer

    安装以下NuGet包 Microsoft.EntityFrameworkCore.SqlServer:SQL server 需要添加包 Microsoft.EntityFrameworkCore.Tools Newtonsoft.Json:用于Json格式转换 创建一个实体类来表示数据库表。在项目中创建一个名为Customer.cs的文件,并添加以下代码 创建一个数据库上下文类,用于定义实体类和数据库连接

    2024年02月07日
    浏览(50)
  • NET Core 6.0 webapi 简单使用+连接数据库

    ASP.NET core NET core 6.0 如何使用 在 Program.cs里面 添加对应注释 效果: Microsoft.EntityFrameworkCore.Sqlite Microsoft.EntityFrameworkCore.Sqlite.Core Newtonsoft.Json:用于Json格式转换 添加测试Api Tips:这里用到ORM查询语法 EntityFramework EF 常用增删改查语句 运行结果

    2024年02月09日
    浏览(39)
  • ASP.Net Core Web API结合Entity Framework Core框架(API的创建使用,接口前端权限设置,前端获取API的Get,post方法)(程序包引用以及导入数据库)

    目录 1. Web Api 程序包引用 2. Web Api 的创建与Http类型的介绍 2.1 ASP.Net Core Web API项目的创建 2 .2  API接口的创建 2.3 HttpGet和HttpPost类型的区别 3.接口权限设置 4.HttpGet方法和HttpPOst方法 5.前端中用HttpGet/Poset获取接口数据 6.EF框架——配置数据库链接字符串(即将数据库中的表导入项

    2024年02月08日
    浏览(66)
  • 使用asp.net core web api创建web后台,并连接和使用Sql Server数据库

    前言:因为要写一个安卓端app,实现从服务器中获取电影数据,所以需要搭建服务端代码,之前学过C#,所以想用C#实现服务器段代码用于测试,本文使用C#语言,使用asp.net core web api组件搭建服务器端,并访问sql server 数据库。 一、安装Visual studio 2022 社区版,并安装ASP.NET和

    2024年02月14日
    浏览(60)
  • EF Core实操,数据库生成实体,迁移

    大家好,我是行不更名,坐不改姓的宋晓刚,下面将带领大家进入C#编程EF Core数据库基础入门知识,如何连接数据库,如何编写代码,跟上我的步伐进入EF Core数据库下的世界。 家人们,如果有什么不懂,可以留言,或者加我联系方式,一起进入微软技术的开拓。 微信:153

    2024年01月22日
    浏览(46)
  • .net 连接MySql数据库 + 使用Microsoft.EntityFrameworkCore.Design自动生成实体类 + 使用EFCore操作数据库

    先准备好一个mysql数据库(我这里准备的是test数据库,里面又准备了两张表,其中book表中只有两个字段,Id(bigint类型)和 Name(varchar类型)) 使用VS新建一个asp.net core web api项目(我这里使用的框架是.net5.0的,确保版本对应很重要) 打开终端 进到项目所在目录(我这里解

    2024年02月07日
    浏览(47)
  • 迁移更新EF Core 中的sqlserver 数据库提示0x80131904

    Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。)  --- System.ComponentModel.Win32Exception (0x80090325): 证书链是由不受信任的颁发机构颁发的

    2024年02月16日
    浏览(48)
  • 如何使用 .Net Core 实现数据库迁移 (Database Migration)

    当我们在编写基于数据库的应用程序时,随着需求的增加和改变,我们需要升级我们的数据库,变更数据库表的字段,当我们的系统的不同版本被部署到了不同的客户那里,在需要给客户升级时,我们如何实现数据库模式 (schema) 的自动升级呢? 传统的管理办法是针对每个数

    2024年02月05日
    浏览(55)
  • ASP.NET之 用Mysql驱动连接数据库

    前言:上一节已经用VisualStudio2019成功创建和运行了ASP项目( https://mp.csdn.net/mp_blog/creation/editor/129413215 ),下面将进行数据库的连接 一,下载驱动库,根JSP一样需要一个Mysql驱动包来支持.NET语言。官网下载链接: https://www.mysql.com/products/connector/   二,安装驱动包  选择自定义

    2024年02月02日
    浏览(39)
  • .NET6.0 EF Core连接sql

    1、先导入四个包 Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.Relational Microsoft.EntityFrameworkCore.SqlServer Microsoft.EntityFrameworkCore.Tools 2、在程序包管理控制台执行 Scaffold-DbContext \\\"server=.;Integrated Security=true;database=DBStu\\\" Microsoft.EntityFrameworkCore.SqlServer -OutPutDir Models Models是你实体类安放

    2024年02月06日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包