Can*_*ide 6 c# asp.net stored-procedures
我想知道是否有一个好的ORM可以自动完成我现在必须做的一些手工工作.我们的应用程序大量使用存储过程,这意味着与数据库的任何交互都通过存储过程.
现在,我必须以传统方式调用存储过程,这非常繁琐.是否有一个ORM在处理存储过程方面做得很好:
Dapper具有相当广泛的存储过程支持.
琐碎的:
create proc spGetOrder
@Id int
as
select * from Orders where Id = @Id
select * from OrderItems where OrderId = @Id
Run Code Online (Sandbox Code Playgroud)
它可以使用以下内容进行映射.
var grid = cnn.QueryMultiple("spGetOrder", new {Id = 1}, commandType: CommandType.StoredProcedure);
var order = grid.Read<Order>();
order.Items = grid.Read<OrderItems>();
Run Code Online (Sandbox Code Playgroud)
此外,您还支持:
例如:
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
Run Code Online (Sandbox Code Playgroud)
可以映射为:
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");
Run Code Online (Sandbox Code Playgroud)
最后,Dapper还允许自定义参数实现:
public interface IDynamicParameters
{
void AddParameters(IDbCommand command);
}
Run Code Online (Sandbox Code Playgroud)
实现此接口时,您可以告诉Dapper您希望添加到命令中的参数.这允许您支持表值参数和其他数据库特定功能.
归档时间: |
|
查看次数: |
2012 次 |
最近记录: |