用过Dapper的人都知道,Dapper.SqlMapper.Query可以直接返回强类型对象,也就是我们所说的.NET中的类(CLASS)。通常情况下我们都是这么用的,如下定义一个Model:

public partial class Goods

{

public long Id { get; set; }

public string Name { get; set; }

public decimal Price { get; set; }

public string Unit { get; set; }

public string Images { get; set; }

public string Summary { get; set; }

public string Label { get; set; }

public decimal NowPrice { get; set; }

public string NowPriceLabel { get; set; }

public byte FreeFreight { get; set; }

public int Stock { get; set; }

public int StoreId { get; set; }

public string StoreName { get; set; }

}

然后在DAL层查询数据库,如下:

Goods[] data = SqlMapper.Query(SqlConnection, sql, paras).ToArray();

这样的结果我们就可以很方便的进行各种操作。但有时候我们可能会遇到这样一些场景,我们想用一个通用的方法来返回结果,比如返回表中的一条记录或者多条记录,和上面不同的是我们这个不是返回固定类型,而是动态的返回我们想要的类型:

SqlMapper.Query //T:Goods,Person,User等等

这个时候我们该怎么做呢,可能我们会想到.Net里的反射,但是反射在这里是不行的,因为

SqlMapper.Query//这个T必需是个存在类型,不支持变量或者表达式

这个时候我们可以直接这样做:

var data = SqlMapper.Query(SqlConnection, sql, paras);/*但是这个返回的是一个IEnumerable,我们没办法直接对其用class的方式进行操作,也没办法直接返回给前端直接绑定使用,通过动态监视,我们可以看到它的最终类型是:DapperRow,这是一个类似datatable里的DataRow。而且你还没办法去new这个对象(DapperRow)。*/

那么我们该怎么做呢,简单的做法就是我们把同样的方法,复制到相应的DAL里。但是我们又不想这么做,因为这个业务没有其它的操作,就是返回一个我们想要的对象。这个时候我们可以用泛型方法来实现这个需求 。关于泛型,这里不做介绍。

代码如下:

///

/// 动态返回T类型结果

///

/// 返回的对象类型

/// 表名

/// 主键

///

public static T GetModel(string table, int id)

{

string sql = "select * from " + table + " where Id=" + id;

return SqlMapper.Query(SqlConnection, sql).AsList()[0];//这里的【0】可以去掉,因为我这个只是返回一条记录,实际使用可以根据情况返回数组

}

不怎么写文章,如有描述不清楚的地方,请见谅。不过最后的代码应该能说明我想要表达的意思。

dapper mysql通用类_Dapper.SqlMapper.Query的通用类型转换:DapperRow相关推荐

  1. dapper mysql通用类_Dapper ORM 用法

    假如你喜欢原生的Sql语句,又喜欢ORM的简单,那你一定会喜欢上Dapper这款ROM.点击下载 Dapper的优势: 1,Dapper是一个轻型的ORM类.代码就一个SqlMapper.cs文件,编 ...

  2. dapper mysql帮助类_DapperHelper 帮助类

    using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...

  3. php mysql通用类_PHP连接MYSQL数据库通用类_PHP教程

    include "mysql.php"; $db = new Dirver(); $db->DBLink($dbhost='localhost', $dbuser='root ...

  4. ecshop的Mysql操作类

    摘要,这是直接摘抄的ecshop的mysql操作类:不过他这里的缓存是用的文件缓存,我们如果想直接使用,可以替换成memcache的或者redis的! <?php/*** ECSHOP MYSQ ...

  5. php连接电脑,PHP_深入理解php的MySQL连接类,无意间在电脑里发现还有这么 - phpStudy...

    深入理解php的MySQL连接类 无意间在电脑里发现还有这么个Mysql的连接类,也不记得哪里收藏的了,贴上来吧. 后面几个show_databases和show_tables....等方法都用了一堆 ...

  6. php简单的mysql类_一个简单的php mysql操作类

    本文分享一个简单的php.mysql操作类,很简单,主要是数据的连接.查询等.有需要的朋友参考下吧. 分享一段php.mysql操作类的代码,供初学的朋友参考. 一个简单的类使用php和mysql数据 ...

  7. c mysql 工具类_Jave工具——servlet+jsp编程中mysql数据库连接及操作通用工具类

    该工具类是在JavaWeb中连接mysql所用到的通用工具类 该类用于Java+Servlet的编程中,方便数据库的操作,连接,获取其列表值.下面是这个数据库操作类的通用方法,基本上能够用于类里面只含 ...

  8. Python3操作mysql操作类

    #下载mysql.connector 由于我的Anaconda装了2和3,所以我首先在cm中使用activate命令切换到python3环境下,然后使用 pip install mysql.conne ...

  9. mysql数据库新浪博客_4.MySQL数据库类的定义

    4.MySQL数据库类的定义 (2008-06-16 20:33:09) 标签: 杂谈 4.MySQL数据库类的定义 俗话说"好的开始是成功的一半",而PHP+MySQL项目中数据 ...

最新文章

  1. MySQL锁阻塞分析
  2. linux组手机nas,linux 搭建nas服务器
  3. 【JSOI2008】最大数
  4. python 列表操作详解,Python列表解析操作实例总结
  5. Java JDBC------------------ODBC(SQLServer)链接
  6. Java编程ture找不到符号,为什么会出现这样的错误呢
  7. 识别水货手机的一个办法
  8. 思科为计算机配置ip命令,使用CLI在交换机上配置IP地址设置
  9. PHP调试工具 - FirePHP安装与使用方法
  10. 100-GAMP安装调试细则
  11. 多少天能学会php,如何在十天内学会php之第八天_php
  12. 记账时,如何对开销进行分类
  13. 【多目标进化优化】多目标进化群体的分布性
  14. wingide运行两个项目_Wing IDE使用教程:部分调试功能介绍
  15. h5php大转盘抽奖,jQuery带次数带弹窗的大转盘抽奖代码(支持h5)
  16. 使用excel进行数据挖掘(4)---- 突出显示异常值
  17. gcr.io 国内源 —— 基于 Travis CI + GitHub + DockerHub + Google Cloud 实现自动定时同步 gcr.io 镜像到 DockerHub
  18. 常用快递API及快递在线下单API分享
  19. mac 重置mysql_mac 重置mysql 登录密码
  20. 计算机毕业论文怎样写系统的意义,毕业论文写作的目的意义及步骤-计算机论文...

热门文章

  1. Gunicorn的使用手册看这篇就够了
  2. “音乐社区第一股”网易云音乐开启招股,索尼音乐任基石投资人
  3. 男子一口气充了90年爱奇艺会员被刑拘,薅羊毛也有基本法则?
  4. matlab @匿名函数
  5. js html字符串转对象,js eval函数使用,js对象和字符串互转.
  6. UVA 12482 Short Story Competition
  7. 关于查找which、whereis、locate、find、grep
  8. WEB跨平台桌面程序构建工具对比(Electron、Tauri、Wails)
  9. 最后一次团队作业-总结
  10. 计算机会考操作题页面设置,信息技术考试操作题