Descargo de responsabilidad: soy el autor de Dapper.
Si usted está buscando un simple asignador de objeto que maneja procsos mapeo de objetos del asunto Dapper es un buen ajuste.
Tenga en cuenta que se envía sin "administración de gráficos", "mapa de identidad", etc. Ofrece un hueso descubierto, solución completa que cubre muchos escenarios que otros ORM no ofrecen.
Sin embargo, ofrece uno de los materializadores de objetos más rápidos que existen, que puede ser 10 veces más rápido que EF o incluso 100 veces más rápido que subsónico en algunos benchmarks.
El trivial:
create proc spGetOrder
@Id int
as
select * from Orders where Id = @Id
select * from OrderItems where OrderId = @Id
pueden ser mapeados con lo siguiente:
var grid = cnn.QueryMultiple("spGetOrder", new {Id = 1}, commandType: CommandType.StoredProcedure);
var order = grid.Read<Order>();
order.Items = grid.Read<OrderItems>();
Además cuenta con un apoyo para:
- Un multi-Mapper que permite filas individuales a varios objetos
- entrada/salida/retorno de soporte parámetro
- Una interfaz extensible para el manejo (como TVP)
Así, por ejemplo parámetro específico db:
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
puede ser mapeada con:
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");
Finalmente, dapper también permitir una implementación de parámetro personalizado:
public interface IDynamicParameters
{
void AddParameters(IDbCommand command);
}
Al implementar esta interfaz, puede indicar qué parámetros desea agregar a su comando. Esto le permite soportar Table-Valued-Params y otras características específicas de DB.
No veo qué hay de malo en los sprocs. A veces son solo la cosa. ¿Cómo obtuvieron un nombre tan malo? – Cheeso
Bueno, hay mucha gente a la que no le gustan. Son geniales cuando se trata de ajustar una consulta de rendimiento, pero es una pesadilla para el mantenimiento, como uno de mis proyectos tiene más de 400 sprocs ... Gracias a Dios por la comparación de esquemas en VSTS. – Jojo
Estoy buscando soluciones similares ya que nuestro nuevo líder de tecnología de proyecto * insiste * en que todas las interacciones de código a base de datos se realicen a través de procedimientos almacenados.Cada operación CRUD. Cada consulta. Todo. Pero, él quiere tener un DAL completamente genérico :-) – CMPalmer