Tutorial by Examples



using StackExchange.Redis; // ... // connect to the server ConnectionMultiplexer connection = ConnectionMultiplexer.Connect("localhost"); // select a database (by default, DB = 0) IDatabase db = connection.GetDatabase(); // run a command, in this case a GET RedisValue myVal ...
在Visual Studio GUI中搜索: 工具> NuGet包管理器>管理解决方案包...(Visual Studio 2015) 或者在Nuget Power Shell实例中运行此命令以安装最新的稳定版本Install-Package Dapper 或者针对特定版本Install-Package Dapper -Version 1.42.0
对于编译时已知的类型,请使用Query<T>的泛型参数。 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; } } } // IDBConnection db = /* ... */...
如果不使用泛型类型,也可以动态查询。 IDBConnection db = /* ... */; IEnumerable<dynamic> result = db.Query("SELECT 1 as A, 2 as B"); var first = result.First(); int a = (int)first.A; // 1 int b = (int)first.B; // 2
class ToyProfiler : IProfiler { public ConcurrentDictionary<Thread, object> Contexts = new ConcurrentDictionary<Thread, object>(); public object GetContext() { object ctx; if(!Contexts.TryGetValue(Thread.CurrentThread, out ctx)) ctx = null; ...
ConnectionMultiplexer conn = /* initialization */; var profiler = new ToyProfiler(); conn.RegisterProfiler(profiler); var threads = new List<Thread>(); var perThreadTimings = new ConcurrentDictionary<Thread, List<IProfiledCommand>>(); for (var i = 0; i < 16; i++) {...
IDBConnection db = /* ... */ var id = /* ... */ db.Execute(@"update dbo.Dogs set Name = 'Beowoof' where Id = @id", new { id });
简单的用法 Dapper完全支持存储过程: var user = conn.Query<User>("spGetUser", new { Id = 1 }, commandType: CommandType.StoredProcedure) .SingleOrDefault(); 输入,输出和返回参数如果你想要更有趣的东西,你可以这样做: var p = new DynamicParameters(); p.Add("@a", 11); p.Add(&...
using System.Data; using System.Linq; using Dapper; class Program { static void Main() { using (IDbConnection db = new SqlConnection("Server=myServer;Trusted_Connection=true")) { db.Open(); var result = db.Query<string>(&quo...
LINQPad非常适合测试数据库查询,并包含NuGet集成 。要在LINQPad中使用Dapper,请按F4打开“查询属性”,然后选择“ 添加NuGet” 。搜索dapper dot net并选择Add To Query 。您还需要单击添加命名空间并突出显示Dapper以在LINQPad查询中包含扩展方法。 启用Dapper后,您可以将语言下拉菜单更改为C#程序 ,将查询结果映射到C#类,并使用.Dump()方法检查结果: void Main() { using (IDbConnection db = new SqlConnection("Server=myServer;Tr...
public class IHtmlStringTypeHandler : SqlMapper.TypeHandler<IHtmlString> { public override void SetValue( IDbDataParameter parameter, IHtmlString value) { parameter.DbType = DbType.String; parameter.Value = value?.ToHtmlString(); } pu...
要在单个查询中获取多个网格,请使用QueryMultiple方法。然后,这允许您通过针对返回的GridReader连续调用顺序检索每个网格。 var sql = @"select * from Customers where CustomerId = @id select * from Orders where CustomerId = @id select * from Returns where CustomerId = @id"; using (var multi = connection.QueryMulti...
Dapper可以通过完全参数化的SQL轻松地遵循最佳实践。 参数很重要,所以dapper可以很容易地使它正确。你只需要以正常的方式为你的RDBMS表达你的参数(通常是@foo ?foo , ?foo或:foo ),给dapper一个有一个名为foo的成员的对象。最常见的方法是使用匿名类型: int id = 123; string name = "abc"; connection.Execute("insert [KeyLookup](Id, Name) values(@id, @name)", new { id, name }); ...
有时,参数的便利性(在维护和表现力方面)可能会被其性能成本所抵消,以将其作为参数对待。例如,当页面大小由配置设置修复时。或者状态值与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 = Page...
数据库查询中的常见场景是IN (...) ,其中此处的列表是在运行时生成的。大多数RDBMS缺乏一个很好的比喻 - 并且没有通用的跨RDBMS解决方案。相反,dapper提供了一些温和的自动命令扩展。所需要的只是一个IEnumerable提供的参数值。涉及@foo的命令扩展为(@foo0,@foo1,@foo2,@foo3) (对于4个项目的序列)。最常见的用法是IN : int[] orderIds = ... var orders = connection.Query<Order>(@" select * from Orders where Id in @or...
有时候,你想多次做同样的事情。如果最外面的参数(通常是单个匿名类型或域模型实例)实际上作为IEnumerable序列提供,则Dapper在Execute方法上支持此操作。例如: Order[] orders = ... // update the totals connection.Execute("update Orders set Total=@Total where Id=@Id", orders); 在这里,dapper只是对我们的数据做了一个简单的循环,基本上和我们做的一样: Order[] orders = ... // update the tota...
Redis中的所有值最终都存储为RedisValue类型: //"myvalue" here is implicitly converted to a RedisValue type //The RedisValue type is rarely seen in practice. db.StringSet("key", "aValue");
db.StringSet("key", 11021); int i = (int)db.StringGet("key"); 或者使用StackExchange.Redis.Extensions : db.Add("key", 11021); int i = db.Get<int>("key");
并不总是能够在一个对象/调用中整齐地打包所有参数。为了帮助处理更复杂的场景,dapper允许param参数成为IDynamicParameters实例。如果执行此操作,则会在适当的时间调用自定义的AddParameters方法并将命令传递给。但是,在大多数情况下,使用预先存在的DynamicParameters类型就足够了: var p = new DynamicParameters(new { a = 1, b = 2 }); p.Add("c", dbType: DbType.Int32, direction: ParameterDirection.Output); ...
在ADO.NET中,正确处理null是一个混乱的常见来源。小巧玲珑的关键是你不必 ;它在内部处理它。 null参数值被正确发送为DBNull.Value 读取为null显示为null ,或者(在映射到已知类型的情况下)简单地忽略(保留其基于类型的默认值) 它只是工作: string name = null; int id = 123; connection.Execute("update Customer set Name=@name where Id=@id", new {id, name});

Page 1 of 1336