Joj*_*ojo 7 .net c# database orm stored-procedures
我有Business对象(DEVELOPERS WRITE)和一些SPROCS(DBA WRITE)
任何人都可以推荐一个好的对象映射器来处理这种设置.
我尝试了codemith和nhibernate并遇到了麻烦.我不介意我的ORM是免费的还是付费的.
Subsonic有一个灵活的解决方案:
class CustomerOrder {
private string productName;
public string ProductName {
get { return productName; }
set { productName = value; }
}
private int total;
public int Total {
get { return total; }
set { total = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
List<CustomerOrder> orders = Northwind.SPs.CustOrderHist("ALFKI")
.ExecuteTypedList<CustomerOrder>();
Run Code Online (Sandbox Code Playgroud)
亚力士是一款坚固的"瑞士军刀"式ORM.
免责声明:我是Dapper的作者.
如果您正在寻找一个简单的对象映射器来处理映射到业务对象的过程,那么Dapper非常适合.
请记住,它没有"图形管理","身份图"等.它提供了一个完整的解决方案,涵盖了其他ORM所不具备的许多场景.
尽管如此,它提供了最快的对象物化器之一,在某些基准测试中,它比EF快10倍,甚至比亚音速快100倍.
琐碎的:
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您希望添加到命令中的参数.这允许您支持Table-Valued-Params和其他DB特定功能.