当前位置: 首页 > 编程笔记 >

Dapper.NET 值内联

赵浩邈
2023-03-14
本文向大家介绍Dapper.NET 值内联,包括了Dapper.NET 值内联的使用技巧和注意事项,需要的朋友参考一下

示例

有时,参数的便利性(就维护和表达能力而言)可能会被其将其视为参数的性能成本所抵消。例如,当页面大小由配置设置固定时。或者状态值与值匹配enum。考虑:

var orders = connection.Query<Order>(@"
select top (@count) * -- these brackets are an oddity of SQL Server
from Orders
where CustomerId = @customerId
and Status = @open", new { customerId, count = PageSize, open =OrderStatus.Open});

这里唯一的真实参数是customerId-其他两个是实际上不会更改的伪参数。如果RDBMS将其检测为常量,通常可以做得更好。Dapper为此有一种特殊的语法-{=name}而不是@name-适用于数字类型。(这可以最大程度地减少来自SQL注入的攻击面)。示例如下:

var orders = connection.Query<Order>(@"
select top {=count} *
from Orders
where CustomerId = @customerId
and Status = {=open}", new { customerId, count = PageSize, open =OrderStatus.Open});

Dapper在发出SQL之前用文字替换值,因此RDBMS实际上会看到以下内容:

select top 10 *
from Orders
where CustomerId = @customerId
and Status = 3

当允许RDBMS系统不仅做出更好的决策,而且开放实际参数阻止的查询计划时,这特别有用。例如,如果列谓词与参数相对,则无法使用该列上具有特定值的过滤索引。这是因为下一个查询可能具有除那些指定值之一之外的参数。

使用文字值,查询优化器能够使用过滤后的索引,因为它知道该值在将来的查询中无法更改。

 类似资料:
  • 本文向大家介绍Dapper.NET null vs DBNull,包括了Dapper.NET null vs DBNull的使用技巧和注意事项,需要的朋友参考一下 示例 在ADO.NET,正确处理null是一个经常引起混淆的问题。dapper的关键在于你不必这样做,它会在内部处理所有的事情。 参数值如果为null,则正确地将其作为 DBNull.Value 发送 读取的 null 值被表示为 nu

  • 本文向大家介绍Dapper.NET 基本用法,包括了Dapper.NET 基本用法的使用技巧和注意事项,需要的朋友参考一下 示例 并非总是可以在单个对象/调用中整齐地打包所有参数。为了帮助处理更复杂的场景,dapper允许param参数是IDynamicParameters实例。如果您这样做,您的自定义AddParameters方法将在适当的时间被调用,并将命令交给附加到。但是,在大多数情况下,使

  • 本文向大家介绍Dapper.NET 列表扩展,包括了Dapper.NET 列表扩展的使用技巧和注意事项,需要的朋友参考一下 示例 数据库查询中的一个常见情况IN (...)是在运行时在此处生成列表。大多数RDBMS对此没有一个很好的隐喻-并且没有通用的跨RDBMS解决方案。相反,dapper提供了一些温和的自动命令扩展。所需要的只是提供的参数值IEnumerable。涉及的命令@foo将扩展为(@

  • 本文向大家介绍Dapper.NET 存储过程,包括了Dapper.NET 存储过程的使用技巧和注意事项,需要的朋友参考一下 示例 简单使用 Dapper完全支持存储的proc: 输入,输出和返回参数 如果您想要更精美的东西,可以执行以下操作: 表值参数 如果您有一个接受表值参数的存储过程,则需要传递一个数据表,该表的结构与SQL Server中的表类型相同。这是表类型和使用它的过程的定义: 要从c

  • 本文向大家介绍Dapper.NET 从Nuget安装Dapper,包括了Dapper.NET 从Nuget安装Dapper的使用技巧和注意事项,需要的朋友参考一下 示例 在Visual Studio GUI中进行搜索: Tools > NuGet Package Manager > Manage Packages for Solution... (Visual Studio 2015) 或者在Nu

  • 本文向大家介绍Dapper.NET 查询动态类型,包括了Dapper.NET 查询动态类型的使用技巧和注意事项,需要的朋友参考一下 示例 如果不使用泛型类型,也可以动态查询。