使用MVC3执行具有多个参数的存储过程的最佳实践是什么?

时间:2012-08-29 19:20:37

标签: c# sql asp.net-mvc-3 entity-framework-4

我正在为我的MVC3应用程序实现搜索功能。我希望将两个参数传递给并执行一个基本上类似于这样的存储过程:

create procedure MyProc
(
@FirstParam nvarchar(50),
@SecondParam nvarchar(20)
)
as select * from MyTable where @FirstParam like @SecondParam
  • MyTable有大约30个字段将为每个对象返回,我需要为几个表创建这样的过程,所以我试图避免使用SqlDataReader并将返回的Sql数据转换为C#。
  • 我想使用类似this method的内容,但我不确定是否可以使用多个参数来完成此操作。
  • 理想情况下我想使用EF4,但在使用EF4时我没有找到任何关于执行存储过程的好信息。

对于执行此任务的最无痛方式和/或最佳实践的任何见解将不胜感激。

2 个答案:

答案 0 :(得分:1)

您的建议可以确实可以通过参数完成,而您应该使用像EF4这样的ORM进行数据访问。像大多数支持存储过程的ORM一样,可以确实将多个参数传递给存储过程。

但是,您将发现的问题是,您无法在SQL Server(或我知道的任何其他SQL数据库)中拥有动态列名称 - 您无法在变量中提供列名。 / p>

您需要使用dynamic SQL来实现此目的,无论是在存储过程中还是其他方式。

答案 1 :(得分:1)

我的消化是使用dynamic linq(以及herehere)。您可以将有效的linq表达式作为常规字符串传递:

var column = "Name";
var value = "Marvin";
var query = DbCtx.MyEntity.Where("{0} == @1", columnName, value);

好处(IMO)是您可以将搜索逻辑保留在应用程序中,如果需要对许多表执行此操作,则可以创建T4模板以为您生成引导代码。