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