12

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

谢谢你,斯蒂芬

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);
4

1 回答 1

11

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

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

select 'foo', 1

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

带有参数和匿名类型的示例:

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

...只是展示了 Dapper以匿名类型的形式提交 SQL 参数的能力。
同样,查询实际上并没有从表中选择任何内容,可能是为了保持简单。

于 2011-06-16T23:02:32.007 回答