Отказ от ответственности: Я являюсь автором Dapper.
Если вы ищете простой объект картографа, который управляет отображением проки для бизнес-объектов Dapper хорошо подходит.
Имейте в виду, что оно не имеет «управления графом», «карты идентификации» и т. Д. Он предлагает голые кости, полное решение, которое охватывает многие сценарии других ORM, нет.
Тем не менее, он предлагает один из самых быстрых материализаторов объектов, который может быть в 10 раз быстрее, чем EF или даже в 100 раз быстрее, чем дозвуковой в некоторых benchmarks.
тривиальное:
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>();
Кроме того, вы имеете поддержку:
- мульти-картографа, который позволяет вам отдельные строки для нескольких объектов
- Input/Output/Return поддержка парам
- расширяемый интерфейс для БД конкретной обработки (например, TVPs)
Так, например параметра:
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 als о позволяем для реализации пользовательских параметров:
public interface IDynamicParameters
{
void AddParameters(IDbCommand command);
}
При реализации этого интерфейса вы можете сказать щеголеватыми, какие параметры вы хотите добавить к вашей команде. Это позволяет поддерживать функции Table-Valued-Params и другие специфичные для БД функции.
Я не понимаю, что так плохо в sprocs. Иногда это всего лишь вещь. Откуда у них такое плохое имя? – Cheeso
Ну, есть много людей, которые им не нравятся. Они великолепны, когда речь идет о настройке запроса на производительность, но кошмар для обслуживания, например, у одного из моих проектов есть 400+ sprocs .... Благодарим за сравнение схемы в VSTS. – Jojo
Я ищу похожие решения, так как наш новый технологический лидер * * настаивает на том, что все взаимодействия между базами данных с помощью хранимых процедур.Каждая операция CRUD. Каждый запрос. Все. Но он хочет иметь полностью общий DAL :-) – CMPalmer