Отказ от ответственности: я являюсь автором Dapper .
Если вы ищете простой инструмент сопоставления объектов, который обрабатывает процессы сопоставления с бизнес-объектами Dapper хорошо подойдет.
Имейте в виду, что он поставляется без "управления графами", "идентификационной карты" и так далее. Он предлагает «1010» полное решение , которое охватывает многие сценарии, которых нет у других ORM.
Тем не менее, он предлагает один из самых быстрых материализаторов объектов, который может быть в 10 раз быстрее, чем EF, или даже в 100 раз быстрее, чем дозвуковой, в некоторых тестах .
Тривиально:
create proc spGetOrder
@Id int
as
select * from Orders where Id = @Id
select * from OrderItems where OrderId = @Id
Может быть сопоставлено со следующим:
var grid = cnn.QueryMultiple("spGetOrder", new {Id = 1}, commandType: CommandType.StoredProcedure);
var order = grid.Read<Order>();
order.Items = grid.Read<OrderItems>();
Дополнительно у вас есть поддержка:
- Мульти-картограф, который позволяет вам объединять строки в несколько объектов
- Поддержка параметров ввода / вывода / возврата
- Расширяемый интерфейс для обработки специфических параметров в дБ (например, TVP)
Так, например:
create proc spGetOrderFancy
@Id int,
@Message nvarchar(100) output
as
set @Message = N'My message'
select * from Orders join Users u on OwnerId = u.Id where Id = @Id
select * from OrderItems where OrderId = @Id
return @@rowcount
Может быть сопоставлено с:
var p = new DynamicParameters();
p.Add("Id", 1);
p.Add("Message",direction: ParameterDirection.Output);
p.Add("rval",direction: ParameterDirection.ReturnValue);
var grid = cnn.QueryMultiple("spGetOrder", p, commandType: CommandType.StoredProcedure);
var order = grid.Read<Order,User,Order>((o,u) => {o.Owner = u; return o;});
order.Items = grid.Read<OrderItems>();
var returnVal = p.Get<int>("rval");
var message = p.Get<string>("message");
Наконец, dapper также допускает реализацию пользовательского параметра:
public interface IDynamicParameters
{
void AddParameters(IDbCommand command);
}
При реализации этого интерфейса вы можете указать dapper, какие параметры вы хотите добавить в свою команду. Это позволяет вам поддерживать Table-Valued-Params и другие специфические функции БД.