ORM-Dapper学习<五>.Dapper的进阶用法

1.    联合查询
A.    写法一
public user_info_model get_user_info__group_info(int id)
        {
            using (conn)
            {
                string query = @"SELECT * FROM dbo.user_info U 
                                 LEFT JOIN user_group UG 
                                 ON U.id=UG.user_info_id 
                                 WHERE U.id = @id";
                user_info_model userinfo = null;
                var b = conn.Query<user_info_model, user_group_model, user_info_model>(query,
                    (user, group) =>
                    {
                        if (userinfo == null || userinfo.id != user.id)
                            userinfo = user;
                        if (group != null)
                            userinfo.Reviews.Add(group);
                        return userinfo;
                    }, new { id },splitOn: "user_info_id").Distinct().SingleOrDefault();
                return b;
            }
        }
附:关键字Reviews在model的属性
public virtual user_group_model usergroup { get; set; }
B.    写法二

注一:连表主键都是唯一且都为id/ID时,示例如下:

var sql = @"SELECT * FROM dbo.user_info U INNER JOIN group_info G ON U.id = G.id";
var data = conn.Query<user_info_model, group_info_model, user_info_model>(sql, (user_info, group_info) => { user_info.groupinfo = group_info; return user_info; });

注二:Dapper 假定你的 ID 列被命名为“ID”或“id”,如果你的主键是不同的,或者你想在点上拆分宽行点,而不是“ID”,可以使用可选的“splitOn”参数。不选会出现这个异常:“When using the multi-mapping APIs ensure you set the splitOn param if you have keys other than Id.”

splitOn的用法示例:

var sql = @"SELECT * FROM dbo.user_info U LEFT JOIN user_group UG ON U.id = UG.user_info_id LEFT JOIN group_info G ON UG.group_info_id = G.id ";
var data = conn.Query<user_info_model, user_group_model, user_info_model>(sql, (user_info, user_group) => { user_info.usergroup = user_group; return user_info; }, splitOn: "user_info_id,group_info_id");
2.    返回多个结果
public void get_moredb(int id)
        {
            var sql = @"SELECT * FROM dbo.user_info WHERE id=@id
                        SELECT * FROM dbo.group_info WHERE id=@id";

            using (var multi = conn.QueryMultiple(sql, new { id = id }))
            {
                var user = multi.Read<user_info_model>().Single();
                var group = multi.Read<group_info_model>().ToList();
            }
        }
3.    执行存储过程
A.    简单写法
public void execute_user_info_withpms(user_info_model user)
       {
            var ur = conn.Query<user_info_model>("p_get_user_info_by_id", 
new { id = user.id }, commandType: CommandType.StoredProcedure).First();
}
B.    灵活写法

注:返回OUTPUT/RETURN等结果

public void execute_user_info_withpms(user_info_model user)
        {
            int result = 0;
            var result2 = 0;
            DynamicParameters pms = new DynamicParameters();
            pms.Add("@name", user.name);
            pms.Add("@pwd", user.pwd);
            pms.Add("@loginDate", user.loginDate);
            //返回SP中Output的值
            pms.Add("@result", null, DbType.Int32, ParameterDirection.Output);
            //返回SP中Return的值
            pms.Add("@result2", null, DbType.Int32, ParameterDirection.ReturnValue);
            using (conn)
            {
                conn.Execute("dbo.p_insert_user_info", pms, null, null, CommandType.StoredProcedure);
                result = pms.Get<int>("@result");
                result2 = pms.Get<int>("@result2");
            }
        }
4.    Ansi String 和 Varchar

注: SQL Server 上,当查询非 Unicode 时,查询 Unicode ANSI 时需要使用 UnicodeDapper 支持 varchar 参数,如果你在一个 varchar 列上执行一个 where 语句,确保下面方式传递参数:

public IEnumerable<user_info_model> ansiStrings()
        {
            var str = conn.Query<user_info_model>("select * from user_info where name = @name", new { name = new DbString { Value = "Test1", IsFixedLength = true, Length = 10, IsAnsi = true } });
            return str;
        }
5.    事务处理
public int transaction(user_info_model user)
        {
            //继承SQL的链接以保证事务在同一个链接中执行
            using (IDbConnection _conn = conn)
            {
                //开始事务
                IDbTransaction transaction = _conn.BeginTransaction();
                try
                {
                    string query = @"DELETE FROM user_info WHERE id = @id";
                    string query2 = @"DELETE FROM user_group WHERE user_info_id = @id ";
                    int row = _conn.Execute(query, new { id = user.id }, transaction);
                    row += _conn.Execute(query2, new { id = user.id }, transaction);

                    //提交事务
                    transaction.Commit();
                    return row;
                }
                catch (Exception ex)
                {
                    //出现异常,事务Rollback
                    transaction.Rollback();
                    throw new Exception(ex.Message);
                }
            }

 

转载于:https://www.cnblogs.com/xing5360/p/6626422.html

Dapper ORM 框架跟我学:第十课 - Dapper QueryMultiple 方法 Dapper 提供的一个扩展方法,基于 ADO.NET 的接口。用于执行多个 SQL 查询并返回多个结果集。它非常适合用于需要一次性获取多个查询结果的场景,例如获取关联的数据集。在这节课中,我们学习Dapper 的方法,并掌握了如何使用它进行数据库查询,尤其是获取多个查询结果的场景。我们还了解了的各个参数,学会了如何执行多个查询并处理多个结果集。通过这些知识,你可以更加灵活地操作数据库,提升开发效率。是 Dapper 提供的一个扩展方法,基于 ADO.NET 的接口。 阅读详情

相关推荐

Dapper ORM 框架跟我学:第十四课 - Dapper 第三方库 Dapper-Contrib 的使用

Dapper-Contrib 是 Dapper 的一个扩展库,它为 Dapper 提供了额外的功能,使得我们可以更方便地进行 CRUD(创建、读取、更新、删除)操作。通过使用 Dapper-Contrib,我们可以减少手动编写 SQL 查询的工作量,提高开发效率。在这节课中,我们学习了如何使用 Dapper-Contrib 来简化数据库操作。通过合理使用 Dapper-Contrib 提供的数据标注和扩展方法,我们可以大大减少手动编写 SQL 查询的工作量,提高开发效率。数据标注:通过使用[Key]

caifox的博客 1903

使用Dapper传递表值参数

直到Dapper 1.26版都无法使用TVP。

Dapper ORM 框架跟我学:第十一课 - Dapper 中参数的使用

Dapper 中,参数可以帮助我们动态地传递数据给 SQL 查询,防止 SQL 注入攻击,并提高查询的灵活性。接下来,我们将详细介绍几种常见的参数类型及其使用方法。在这节课中,我们学习Dapper 中参数的多种使用方法,包括匿名类型参数、动态参数、列表参数、字符串参数和表值参数。这些参数类型各有特点,适用于不同的场景。通过合理使用这些参数,我们可以更灵活地操作数据库,提高应用程序的性能和安全性。匿名类型参数:适合在不需要定义实体类的情况下传递简单的参数。动态参数。

caifox的博客 1211

c# Dapper,添加,修改,删除,查询,事务,存储过程,含数据库(从入门到高级)

c# Dapper高级编程; 添加方法3个, 修改方法2个, 删除方法2个, 查询方法6个(含Join), 事务方法3个, 存储过程方法3个

橙-极纪元-JJYCheng 4565

Dapper 传参

dapper 在使用时遇到的一些问题

qq_41457272的博客 420

Dapper 参数化查询 ,随笔

Dapper 参数化查询: 对于此种查询:id in(1,2,3,4) ,code in('a','b','c') ,传参:List<int> id ,List<string> code .实列如下: public List<Evaluation_SelfAssessment_details_ChildEntity> GetChildListByIndexIds(int selfId, List<int> indexIds) ...

sage425的专栏 2428

dapper批量插入

要用到DapperExtensions库,上码: /// /// 批量插入功能 /// public void InsertBatch(IDbConnection conn, IEnumerable entityList, IDbTransaction transaction = null) where T : class {

每天进步一点点 1万+

Dapper从入门到精通

    Dapper是一个适用于.NET平台、轻量级的ORM框架,在性能方面拥有微型ORM之王的美誉,几乎与原生ADO.NET数据读取器一样快,如果你在小的项目中使用Entity Framework、NHibernate等框架来处理大数据访问及关系映射,未免有点杀鸡用牛刀,你又觉得ORM省时省力,这时Dapper 将是你不二的选择。    Dapper是国外大型IT问答社区StackOverFlow最早开发并开源的,Dapper的源代码放在github上托管,并且可以用NuGet方式添加到项目中,Dapper的r支持多表并联的对象,支持一对多、多对多的关系,支持原生sql与模型对象混合写法,易学易用,无XML无属性,代码以前怎么写现在还怎么写。

ORM-Dapper学习<>.关于Dapper

Dapper的简介   Dapper.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的。Dapper只有一个代码文件,完全开源,你可以放在项目里的任何位置,来实现数据到对象的ORM操作,体积小速度快。 使用ORM的好处是增、删、改很快,不用自己写sql,因为这都是重复技术含量低的工作,还有就是程序中大量的从数据库...

diaochou1478的博客 1386

C#进阶-轻量级ORM框架Dapper的使用教程与原理详解

本文详细介绍了Dapper在C#中的使用方法,包括Dapper的基本概念、与其他持久层框架的比较、基本语法和高级语法的使用,并通过实例讲解了如何在项目中集成和使用DapperDapper以其高效的性能和简洁的API受到开发者的青睐,适用于各种数据库操作需求。本文还将深入探讨Dapper的核心原理,通过内部代码展示其工作机制。最后,总结了Dapper的优缺点及其在实际开发中的应用场景,为开发者提供全面的指导。

踏雨歌青春,诗酒趁年华 1万+

SQLite学习——Dapper初识

dapper下载:https://www.nuget.org/packages/Dapper/1.40.0

jiDxiaohuo的博客 1120

C# 中 Dapper 轻量级 ORM 的应用详解

接下来,我们将通过具体的示例来展示如何在 C# 中使用 Dapper 进行数据库操作。跟着我一起,一步步来,你会发现这一切并不难。📋。

java专栏 948

ORM-Dapper学习<>.Dapper的基本用法

1. 新增 public int insert_user_info(user_info_model user) { using (conn) { string query = @"INSERT INTO user_info (name ,pwd ,loginDate) ...

diaochou1478的博客 301

轻量高效ORMDapper

大家好,我是大成子。今天学习ORM框架之dapper介绍dapper是一个简单的对象关系映射框架(ORM----Object Relation Mapping),它几乎与原始的http://ADO.NET 数据操作读取一样快(反正我http://ado.net已经忘完了╥__╥,以前用的最多是linq to sql和ef,不需要写sql语句,使用linq操作数据源),它负责数据库与编程语言之间的映...

周星星 464

ORM框架EF和Dapper如何选型,他们都有哪些优缺点

EF和Dapper都是ORM框架,那什么是ORM呢? ORM的全称是Object Relational Mapping,即对象关系映射.EF和Dapper他们的共同作用,都是将关系型数据库中的表的数据,映射成为对象.这样,开发人员就可以把对数据库的操作转化为对这些对象的操作. 因此他们共同目的就是:为了方便开发人员,以面向对象的思想来实现对数据库的操作. 那他们又有什么优缺点呢?我们实际的软...

屈先生不穿大棉袄~ 5547

ORM-Dapper快速学习

轻量级ORM框架——第一篇:Dapper快速学习 转载地址:http://www.cnblogs.com/huangxincheng/p/5828470.html   我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架 叫做dapper,而且被称为the k...

dgef86306的博客 163

.NET-4.ORM 常见框架EFcorn、Dapper、SqlSugar、FreeSql 和ADO.NET

EF core学习与深入前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 学习参考: 1, .NET 6教程,.Net Core 2022视频教程,杨中科主讲— 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotli

joyyi9的博客 5049

Dapper与微ORM对比指南:DapperDapper.Rainbow、PetaPoco如何选择

.NET开发中,微ORM(Micro ORM)已成为高性能数据访问的首选方案。Dapper作为最受欢迎的微ORM之一,提供了极致的性能和灵活性。本文将深入对比DapperDapper.Rainbow和PetaPoco三大微ORM工具,帮助你做出最佳选择。 ## 什么是微ORM?为什么选择Dapper?🤔 微ORM是轻量级的对象关系映射工具,相比Entity Framework等全功能OR

gitblog_00714的博客 377
上一篇: ORM-Dapper学习<四>.Dapper的基本用法
diaochou1478
博客等级 码龄10年 1粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值