Dapper official translation Tutorial 1: What Dapper that?
What is the Dapper?
Dapper .NET is a simple object mappers, with the king of micro title ORM in speed, and almost as fast as the speed of the original ADO.NET data reader. ORM is an object-relational mapper, which is responsible for mapping between databases and programming languages. Dapper By providing a useful extension method to query the database to extend IDbConnection.
How to use Dapper?
Use Dapper just three steps:
1. Create an object IDbConnecton
2. Write a statement CURD
3. statements are passed to the Execute method as a parameter.
Dapper installation:
Use NuGet command: the Install-Package Penalty for Dapper
Database requirements:
As long as it provides a database Provider's database, you can use Dapper.
Dapper extension method:
-
string sqlOrderDetails = "SELECT TOP 5 * FROM OrderDetails;";
-
string sqlOrderDetail = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;";
-
string sqlCustomerInsert = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";
-
-
using (var connection = new SqlCeConnection("Data Source=SqlCe_W3Schools.sdf"))
-
{
-
var orderDetails = connection.Query<OrderDetail>(sqlOrderDetails).ToList();
-
var orderDetail = connection.QueryFirstOrDefault<OrderDetail>(sqlOrderDetail, new {OrderDetailID = 1});
-
var affectedRows = connection.Execute(sqlCustomerInsert, new {CustomerName = "Mark"});
-
-
Console.WriteLine(orderDetails.Count);
-
Console.WriteLine(affectedRows);
-
-
FiddleHelper.WriteTable(orderDetails);
-
FiddleHelper.WriteTable( new List<OrderDetail>() { orderDetail });
-
}
Dapper parameters:
-
// Anonymous
-
var affectedRows = connection.Execute(sql,
-
new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
-
commandType: CommandType.StoredProcedure);
-
-
// Dynamic
-
DynamicParameters parameter = new DynamicParameters();
-
-
parameter.Add( "@Kind", InvoiceKind.WebInvoice, DbType.Int32, ParameterDirection.Input);
-
parameter.Add( "@Code", "Many_Insert_0", DbType.String, ParameterDirection.Input);
-
parameter.Add( "@RowCount", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);
-
-
connection.Execute(sql,
-
parameter,
-
commandType: CommandType.StoredProcedure);
-
-
int rowCount = parameter.Get<int>("@RowCount");
-
-
// List
-
connection.Query<Invoice>(sql, new {Kind = new[] {InvoiceKind.StoreInvoice, InvoiceKind.WebInvoice}}).ToList();
-
// String
-
connection.Query<Invoice>(sql, new {Code = new DbString {Value = "Invoice_1", IsFixedLength = false, Length = 9, IsAnsi = true}}).ToList();
Dapper execution results
-
string sqlOrderDetails = "SELECT TOP 10 * FROM OrderDetails;";
-
-
using (var connection = new SqlCeConnection("Data Source=SqlCe_W3Schools.sdf"))
-
{
-
var anonymousList = connection.Query(sqlOrderDetails).ToList();
-
var orderDetails = connection.Query<OrderDetail>(sqlOrderDetails).ToList();
-
-
Console.WriteLine(anonymousList.Count);
-
Console.WriteLine(orderDetails.Count);
-
-
FiddleHelper.WriteTable(orderDetails);
-
-
FiddleHelper.WriteTable(connection.Query(sqlOrderDetails).FirstOrDefault());
-
}
Dapper other aids
-
// Async
-
connection.QueryAsync<Invoice>(sql)
-
-
// Buffered
-
connection.Query<Invoice>(sql, buffered: false)
-
-
// Transaction
-
using (var transaction = connection.BeginTransaction())
-
{
-
var affectedRows = connection.Execute(sql,
-
new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
-
commandType: CommandType.StoredProcedure,
-
transaction: transaction);
-
-
transaction.Commit();
-
}
-
-
// Stored Procedure
-
var affectedRows = connection.Execute(sql,
-
new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
-
commandType: CommandType.StoredProcedure);