Dapper 示例代码的说明

Posted

技术标签:

【中文标题】Dapper 示例代码的说明【英文标题】:Clarification of Dapper Example Code 【发布时间】:2011-06-16 22:48:55 【问题描述】:

我正在尝试了解 Dapper 并且似乎缺少一些非常基本的东西,有人可以解释从 Google 代码上的 Dapper 主页获取的以下代码并解释为什么没有 From 子句和查询的第二个参数方法(动态)传递了一个匿名类型,我认为这是在以某种方式设置一个命令对象,但希望用普通的术语来解释一下。

谢谢你, 斯蒂芬

public class Dog     
    public int? Age  get; set;     
    public Guid Id  get; set;     
    public string Name  get; set;     
    public float? Weight  get; set;     
    public int IgnoredProperty 
        get  return 1; 
    


var guid = Guid.NewGuid();
var dog = connection.Query<Dog>("select Age = @Age, Id = @Id", new  Age = (int?)null, Id = guid );            

dog.Count().IsEqualTo(1);
dog.First().Age.IsNull();
dog.First().Id.IsEqualTo(guid);

【问题讨论】:

我也有一个关于 Dapper 的问题。我试图弄清楚如何将完全填充的 TEntity[] 数组发送到 Execute 函数。看看马克是不是把头伸进门里…… @IAbstract:那你为什么不问自己的问题呢? @Robert:我会......当/如果我无法弄清楚。这只是一个评论......在答案下查看我的评论:) 【参考方案1】:

前两个示例只是不进行任何“真正的”数据访问,可能是为了保持简单。 是的,使用了一个连接 (connection.Query(...)),但这只是因为这是调用 Dapper 方法的唯一方法(因为它们扩展了 IDbConnection 接口)。

这样的东西是完全有效的 SQL 代码:

select 'foo', 1

...它只是在运行中“生成”它的结果,而不是从表中实际选择任何东西。

带参数和匿名类型的例子:

var dog = connection.Query&lt;Dog&gt;("select Age = @Age, Id = @Id", new Age = (int?)null, Id = guid );)

...只是展示了 Dapper 的能力to submit SQL parameters in the form of an anonymous type。 同样,查询实际上并没有从表中选择任何内容,可能是为了保持简单。

【讨论】:

谢谢克里斯蒂安。我还假设因为他们使用的是@符号,所以这是 SQL Server 的方言?对于 Oracle,我应该将 @ 替换为 : 吗? 对不起,我过度阅读了您使用 Oracle 的事实(我使用 SQL Server,但不了解 Oracle)。是的,“@”表示 SQL 参数。由于 Dapper 本身完全独立于数据库 (code.google.com/p/dapper-dot-net/…),因此您将不得不使用 Oracle 等效的“@”。 +1: 很好的信息...对于 mysql,我会将 '@' 替换为 '?'不是吗? 如果“?”表示MySql中的一个参数,那么yes。我也不是 MySql 大师 ;-) MySQL 是从哪里来的?,是的,我知道 Oracle 现在拥有该产品,但是 ODP.Net 的 Oracle 11g 参数是冒号,而不是问号,事实证明这是MySQL。 ;) 猜我们没事。

以上是关于Dapper 示例代码的说明的主要内容,如果未能解决你的问题,请参考以下文章

Dapper in .Net Core

Dapper系列 作者:懒懒的程序员一枚

dapper 最简单操作示例

使用 Dapper 的 NextResult

在 Dapper 中执行带参数的存储过程

Netty——Path和Files类中方法说明与代码示例