Chr*_*ris 5 c# asp.net stored-procedures entity-framework
现在我将多个参数传递给具有Entity Framework的存储过程,它看起来像这样.
public long AddDealer(Dealer dealer)
{
return Convert.ToInt32(AWJE.Database.SqlQuery<Dealer>(
"usp_InsertDealer @Name, @Description",
new SqlParameter("@DealerID", dealer.DealerID).Value,
new SqlParameter("@Name", dealer.Name),
new SqlParameter("@Description", dealer.Description)
));
}
Run Code Online (Sandbox Code Playgroud)
是否有更优雅或更清晰的方式传递多个参数,而不是显示的方式?如果我遇到其他存储过程有更多参数要传递,那么这种方式看起来会很快变得混乱.
你的代码示例显然不是一个有效的例子:
Dealer为int.long,那么为什么要将存储过程的结果转换为int?@DealerID参数,但它不是SP调用的一部分.SqlParameters有调用.Value添加到它上面.所以,让我调整它,并假设你的出发点是这样的:
public long AddDealer(Dealer dealer)
{
return AWJE.Database.SqlQuery<Dealer>(
"usp_InsertDealer @Name, @Description",
new SqlParameter("@Name", dealer.Name),
new SqlParameter("@Description", dealer.Description)
).DealerID;
}
Run Code Online (Sandbox Code Playgroud)
或者你可能决定SP long直接返回一个,如下所示:
public long AddDealer(Dealer dealer)
{
return AWJE.Database.SqlQuery<long>(
"usp_InsertDealer @Name, @Description",
new SqlParameter("@Name", dealer.Name),
new SqlParameter("@Description", dealer.Description)
);
}
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,我看到的唯一简化是你可以改变调用,SqlQuery以便使用位置参数而不是命名参数.进行此更改允许您放弃显式SqlParameter实例的创建.然后可以将呼叫简化为:
public long AddDealer(Dealer dealer)
{
return AWJE.Database.SqlQuery<long>(
"usp_InsertDealer @Name, @Description",
dealer.Name,
dealer.Description
);
}
Run Code Online (Sandbox Code Playgroud)
...你如何命名@Name或@Description不再具有任何重要性,但你必须确保以正确的顺序传递参数值.
除此之外,我不知道你可以使这个更干净或更优雅.
| 归档时间: |
|
| 查看次数: |
1471 次 |
| 最近记录: |