
C#/.NET开发 之ORM框架
常用的ORM框架的应用与开发分享
极客研究者
空余时间喜欢研究、钻研技术,入行不久的一枚菜鸟
展开
-
Entity Framework Core 版本计划
EF Core版本计划转载 2022-12-24 11:33:23 · 223 阅读 · 1 评论 -
EF Core 2.2中将ORM框架生成的SQL语句输出到控制台
EF Core 2.2中将ORM框架生成的SQL语句输出到控制台原创 2022-07-24 22:30:05 · 1249 阅读 · 0 评论 -
Linq用法大全(三)
Linq用法大全(三)转载 2021-07-13 08:51:55 · 110 阅读 · 0 评论 -
C# 之Linq用法大全(二)
Linq用法大全(二)转载 2021-07-13 08:50:57 · 156 阅读 · 0 评论 -
C# 之Linq用法大全(一)
Linq用法大全(一)转载 2021-07-13 08:49:54 · 578 阅读 · 0 评论 -
c# 中延迟加载(执行)导致的error
今天在热修生产环境的bug,测试环境没问题。然后根据报错信息,研究了一会,导致走了一些弯路。我们在使用orm进行数据查询时,经常配合linq中的一些方法使用。尤其Where使用频率极高。Error Info:A second operation started on this context before a previous operation completed. This is usually caused by different threads using the same instanc原创 2021-07-12 22:03:56 · 1179 阅读 · 0 评论 -
EF Core相关的知识和进阶
可查看老杨的博客,写的非常不错。EF Core 系列转载 2021-07-11 15:55:29 · 196 阅读 · 0 评论 -
C# sql 参数化查询变慢的原因以及解决方案
参数化查询比拼接字符串慢的原因转载 2021-07-11 09:08:52 · 1429 阅读 · 0 评论 -
EF Core基于MySql数据库进行开发
由于业务的重叠,java组有一些功能,需要我们组提供api接口。我们组是.net,需要连接到mysql数据库,大学自学java时,研究过一段时间的mysql和oracle,就再也没做过相关的开发,工作都是和sql server打交道。首选肯定是ORM框架。折腾了一会还是遇到了一些坑吧。我们的项目都是基于.net core进行开发的.首选EF Core框架进行数据的交互。Solution下面的已有项目,都是基于2.2的 ef core版本进行开发的。我在写demo时选择的是3.1的版本:搭配组合如下原创 2021-05-30 10:06:19 · 515 阅读 · 1 评论 -
EF Core中使用Scaffold-DbContext 命令更新数据库对应的模型
我们在实际项目中,有时需要新建数据表或者更新数据表的字段,那么应该即使更新对应的Model类,1.先安装所需要的包:2.在VS的程序包管理控制台(工具—>NuGet包管理器):操作以下命令即可:Scaffold-DbContext "data source=serverAddress;initial catalog=databaseName;persist security info=True;user id=userName;password=password;multipleactive原创 2021-02-03 21:34:36 · 1857 阅读 · 0 评论 -
EF Core中,如何将生成的sql语句输出到控制台
当然也可以写到日志中,我这里为了开发方便,直接演示打印到Console上。那么我们就可以从生成的sql,分析是否属于最优的。目前是最新版本是5.0的:1.导入所需的包2.在数据库上下文类中,添加以下代码即可:添加属性:public static readonly ILoggerFactory loggerFactory = LoggerFactory.Create(builder => { builder.AddConsole(); });在OnConfiguring方法中:设置原创 2020-12-21 16:44:52 · 2012 阅读 · 1 评论 -
EF COre中的事务管理
微软官网链接原创 2020-10-31 10:23:38 · 946 阅读 · 0 评论 -
EF Core Code First模式中Model发生改变如何更新数据库
1.首先,我们按照此文章的方式的已建立了对应的数据库:EF Core 指南2.因为业务需求,可能会添加字段,那么就需要更新Model对应的数据表结构了不要删除已经生成的迁移文件。Add-Migration 新迁移名称然后再重新更新数据库即可。Update-Database...原创 2020-10-04 22:25:44 · 1638 阅读 · 0 评论 -
C#中的数据类型与对应的Sqlserver的数据类型
数据类型的Mapping原创 2020-06-18 20:34:47 · 370 阅读 · 0 评论 -
Code First模式下使用Fluent API配置实体类之间的关系(2)
N:N关系的配置:案例:学生与老师是多对多关系1.新建控制台项目:添加实体类Student和Teacher:Student类:public class Student { public int StudentId { get; set; } public string StudentName { get; set;} public string Address { get; set; } //N:N关系导航属性原创 2020-06-16 21:18:26 · 246 阅读 · 0 评论 -
Code First模式下使用Fluent API配置实体类之间的关系(1)
在关系型数据库中,表与表之间有如下关系:One-to-One RelationshipsOne-to-many or Many to One RelationshipsMany-to-Many Relationships1:1 关系 —>比如每个人只能有一个唯一的身份证号码(Person:CardId)1:N 关系 -->班级与学生(Class:Student)、产品类型与产品(ProductType:Product)等等N:N 关系 ---->学生与老师(Student:Te原创 2020-06-16 18:54:41 · 228 阅读 · 0 评论 -
EF中的增删改查操作
比较常用的是使用linq和lambda表达式,以及原生的sql查询直接上Demo:没有涉及到跨表查询,后续会继续更新public static void TestQuery01() { using (SchoolContext context = new SchoolContext()) { //使用Linq表达式查询所有Grade记录 //List<Grade> gradeList= context.Grades.Select(g => g).ToList<Grade原创 2020-06-16 17:42:17 · 387 阅读 · 0 评论 -
EF Code First模式下Fluent API的使用(1)
之前的文章介绍过,在实体类以及属性上使用数据注解的方式去覆盖EF默认的约定,这种方式使得整个实体类更加复杂,且只提供一些有限的配置选项,可能无法满足开发需求,但在Code First中的Fluent API提供了所有你所需要的配置选项,来完成实体类与数据表之间的映射。Code First 中的Fluent API是用来配置领域类(实体类)覆盖掉EF原有的约定。本次演示以控制台项目.1.创建控制台项目TestCodeFirstDemo02:添加实体类Student、GradeStudent类:u原创 2020-06-16 17:20:06 · 528 阅读 · 0 评论 -
EF中使用代码进行SQL的监控
//查看EF生成的底层SQL操作context.Database.Log = (sql) =>{ Console.WriteLine(sql);};context为数据库上下文对象原创 2020-06-15 20:14:32 · 385 阅读 · 0 评论 -
Dapper中跨表连接查询的问题,不查询所有字段,splitOn参数的设置
今天在做项目时,遇到这个问题,顺便记录一下:跨表连接查询时,如果只想查询我们需要的字段,那么如何处理?1.创建相应的业务模型类:将查询出来的数据封装到此对象中比如User业务模型类ViewUserModel:public class ViewUserModel{ public int UserId { get; set; } public UserType UserType { get; set; } public string UserName { get; set; }原创 2020-06-04 11:31:21 · 1625 阅读 · 0 评论 -
轻量级ORM框架Dapper(6)之级联操作
需求:删除某一条ProductType记录,同时将所有相关的Product记录也删除掉ProductType:Product -> 1:N relationship如:删除家具类型,并且把相关的产品全部删除。产品类型:家具产品类型为家具的三个产品:Codes:/// <summary> /// 测试级联删除操作:先删除主表数据,再删除子表数据 /// 删除某一...原创 2020-04-11 16:29:18 · 417 阅读 · 0 评论 -
轻量级ORM框架Dapper(5)之调用存储过程
1.根据需求创建存储过程:ALTER PROC [dbo].[Query_ProductNameAndPrice]@productNO INT,@procudtName VARCHAR(50) OUTPUT,@price MONEY OUTPUTASSELECT * FROM Product WHERE ProductNo=@productNOSELECT @procudtName...原创 2020-04-11 15:22:54 · 1186 阅读 · 0 评论 -
轻量级ORM框架Dapper(4)之事务的控制
程序事务:在应用程序中,对某些相关的操作添加事务控制,要么同时执行成功,提交事务并且持久化数据到数据库中,要么同时执行失败,回滚事务,回到最初状态.在Dapper中添加事务控制: /// <summary>/// 在Dapper中使用事务控制/// </summary>public static void TestDapperTransaction() { ...原创 2020-04-11 12:19:16 · 546 阅读 · 2 评论 -
轻量级ORM框架Dapper(3)之数据的更新操作
数据的更新操作包括:Insert、Delete、Update在Dapper中,我们使用提供的重载的扩展方法: // // 摘要: // Execute parameterized SQL. // // 参数: // cnn: // The connection to que...原创 2020-04-11 11:59:32 · 1498 阅读 · 6 评论 -
轻量级ORM框架Dapper(2)之数据的查询操作
批量查询数据: /// <summary> /// 批量查询数据(单表查询) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sql"></param> ...原创 2020-04-11 11:13:24 · 1175 阅读 · 0 评论 -
轻量级ORM框架Dapper开篇(1)
Dapper是一款轻量级的ORM框架,执行效率比较高,比较适合小型项目的开发。ORM思想的核心:对象关系映射,把对表与表之间的操作,转换为对象之间的处理,从数据库中提取到的数据,会根据配置自动封装到指定的对象中,然后通过对对象的修改来更新数据库的指定的记录数据Dapper的优势:轻量.只有一个文件(SqlMapper.cs)编译完成之后只有120k(好象是变胖了)速度快.Dapper的速...原创 2020-04-11 09:40:44 · 498 阅读 · 0 评论 -
Entity FrameWork 英文版总结与入门介绍
EF入门介绍: EF Basic Introduction原创 2020-04-10 22:37:03 · 141 阅读 · 0 评论 -
Entity FrameWork之CodeFirst 代码优先模式(5)------数据迁移
如何解决数据迁移策略,导致的数据库内容的丢失?EF提供了一个新的数据库初始化器 MigrateDatabaseToLastestVersion,这个工具在实体模型改变时自动帮我们更新数据库,且不会造成数据丢失原始的数据库:下面介绍一种更新数据库的方法:自动迁移:1.在VS中,工具->NuGet包管理器->程序包管理器控制台:执行下面的代码:enable-migration...原创 2020-04-10 22:25:16 · 305 阅读 · 0 评论 -
Entity FrameWork之CodeFirst 代码优先模式(4)
这里有个问题,数据表的结构,很大程度上会根据需求,添加需要的字段,在Grade类中添加一个测试属性:Owner(string类型)那么我们再来测试一下,发现会抛出异常:Error Message:The model backing the ‘SchoolCRMEntities’ context has changed since the database was created. Con...原创 2020-04-10 21:21:26 · 286 阅读 · 0 评论 -
Entity FrameWork之CodeFirst 代码优先模式(3)
接着上一篇:4.自定义数据上下文类SchoolCRMEntities,需要继承DbContext类using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data.Entity;namespa...原创 2020-04-10 20:35:24 · 180 阅读 · 0 评论 -
Entity FrameWork之CodeFirst 代码优先模式(2)
创建实体领域类,以及配置数据注解:1.Student实体类:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.ComponentModel.DataAnnotations;using S...原创 2020-04-10 19:54:27 · 204 阅读 · 0 评论 -
Entity FrameWork之CodeFirst 代码优先模式(1)
CodeFirst 代码优先模式:是在Entity Framework 4.1引进的开发模式,主要用于领域驱动设计(Domain Driven Design),在CodeFirst模式中,我们不再先创建数据库,然后在程序中创建对应的类;CodeFirst开发模式中我们只关注应用程序的域(Domain)直接开始创建类,EF会根据我们创建的类自动生成数据库。CodeFirst工作流程:开发...原创 2020-04-10 18:18:43 · 735 阅读 · 0 评论 -
Entity FrameWork DBFirst模式之数据库结构的变更
当指定的数据库架构发生了更新(比如表的结构发生了变化,添加了存储过程或函数),那么该如何更新到对应的EDM中?打开EDM文件,在文件空白区域右键->从数据库更新模型:会弹出框:选择指定的项即可,完成...原创 2020-04-10 17:51:17 · 531 阅读 · 0 评论 -
Entity FrameWork DBFirst模式(2)之调用存储过程
存储过程是指在数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后以后再调用任意次都不需要重新编译了。说白了就是一堆SQL语句的合并,中间加了点逻辑控制,俗称为数据库中的函数。在一些金融等大型企业中,基本都是由内部人员编写好存储过程,然后由外部程序员调用存储过程,因为内部数据逻辑处理方式涉及商业机密等等。数据库存储过程具有如下优点:1、存储过程只在创建时进行编译,...原创 2020-04-10 15:57:34 · 282 阅读 · 0 评论 -
Entity FrameWork DBFirst模式(2)之数据的更新操作(2)
删除记录:/// <summary> /// 删除产品 /// </summary> public static void DeleteProduct() { using (CRMDBEntities cRMDBEntities = new CRMDBEntities()) ...原创 2020-04-10 15:23:54 · 302 阅读 · 0 评论 -
Entity FrameWork DBFirst模式(2)之数据的更新操作(1)
对数据库记录进行更新操作(Insert、Delete、Updte),需要使用DbSet 和 DbContext 这两个比较重要的类:DbSet类:Add (object entity)方法:将指定的对象以Added状态添加到Contexnt中,当调用SaveChanges()方法时,将会被添加到数据库中AddRange (System.Collections.IEnumerable en...原创 2020-04-10 15:18:30 · 440 阅读 · 0 评论 -
Entity FrameWork DBFirst模式(2)之数据的查询(4)
如果想像ADO.NET那种方式去操作数据库,在Entity FrameWork中也是支持执行原生的SQL语句。在DbContext 类中,提供一个Database属性可以创建一个当前上下文对象相关的数据库对象。DbContext类Database 类中提供一些重要的重载方法:SqlQuery():执行数据的查询操作ExecuteSqlCommand():执行数据的更新操作(增、删、改)...原创 2020-04-10 14:51:36 · 276 阅读 · 0 评论 -
Entity FrameWork DBFirst模式(2)之数据的查询(3)
现在想实现如下需求:查询A记录并且获取相关的所有B记录,以及获取B记录相关的所有C记录,这就涉及到了多表连接查询。在EF中使用include()方法实现多表连接查询,需要满足一定的关系:如:A:B — 1:NB:C — 1:N多表连接查询:/// <summary> /// 多表连接查询 ProductType-->Product --->Qu...原创 2020-04-10 12:30:08 · 261 阅读 · 0 评论 -
Entity FrameWork DBFirst模式(2)之数据的查询(2)
EF中跨表查询:使用上一篇的方式,只能获取当前记录的字段数据,无法获取与其相关的记录数据,在DbQuery类提供include()方法用来在查询中获取相关记录的数据:Include (string path) --> path:实际就是相关记录的实体名称每个Product记录都有相关的ProductType(产品类别)demo: /// <summary> ...原创 2020-04-10 11:43:39 · 232 阅读 · 0 评论 -
Entity FrameWork DBFirst模式(2)之数据的查询(1)
在EF中执行数据的操作,需要使用EDM为我们生成的content类,本例为CRMDBEntities类:namespace EntityFrameWorkDemo{ using System; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Data....原创 2020-04-10 10:59:52 · 332 阅读 · 0 评论