c# – 与ASP.NET 4和SQL Server中的存储过程一起使用的ORM

我想知道是否有一个好的 ORM可以自动完成我现在必须做的一些手工工作.我们的应用程序大量使用存储过程,这意味着与数据库的任何交互都通过存储过程.

现在,我必须以传统方式调用存储过程,这非常繁琐.是否有一个ORM在处理存储过程方面做得很好:

>具有结构化的输入/输出参数,表示表值类型
>轻松允许输出参数为用户定义的类型,包括标量和表值
>返回多个记录集

解决方法

Dapper具有相当广泛的存储过程支持.

琐碎的:

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您希望添加到命令中的参数.这允许您支持表值参数和其他数据库特定功能.

You’re using it now on StackOverflow

相关文章

原文地址:http://msdn.microsoft.com/en-us/magazine/cc163...
前言 随着近些年微服务的流行,有越来越多的开发者和团队所采...
最近因为比较忙,好久没有写博客了,这篇主要给大家分享一下...
在多核CPU在今天和不久的将来,计算机将拥有更多的内核,Mic...
c语言输入成绩怎么判断等级
字符型数据在内存中的存储形式是什么