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

C# 什么';使用MVC3执行具有多个参数的存储过程的最佳实践是什么?,c#,sql,asp.net-mvc-3,entity-framework-4,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个字段,每个对象将返回这些字段,我需要为几个表创建一个类似这样的过程,因

我正在努力在我的MVC3应用程序中实现搜索功能。我希望将两个参数传递到并执行一个存储过程,该存储过程基本上如下所示:

create procedure MyProc
(
@FirstParam nvarchar(50),
@SecondParam nvarchar(20)
)
as select * from MyTable where @FirstParam like @SecondParam
  • MyTable有大约30个字段,每个对象将返回这些字段,我需要为几个表创建一个类似这样的过程,因此我试图避免使用SqlDataReader并将返回的Sql数据转换为C
  • 我想使用类似的方法,但我不确定是否可以使用多个参数来实现
  • 理想情况下,我希望使用EF4,但在使用EF4时,我没有发现任何关于执行存储过程的好信息
任何关于执行此任务的最无痛方法和/或最佳实践的见解都将不胜感激。

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

但是,您将发现的问题是,SQL Server(或我所知道的任何其他SQL数据库)中不能有动态列名—不能在变量中提供列名

您需要使用来实现这一点,无论是在存储过程中还是其他方面。

我的建议是使用(和,和)。可以将有效的linq表达式作为正则字符串传递:

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

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

只是为了避免常见情况:您的模型已经在EF4中了?SP是唯一的解决方案,或者您可以采取其他方法吗?是的,该模型已经在EF4中。我愿意接受任何方法。我可以自由支配这个项目。“LIKE”条款是“自由统治”唯一必须的+1条款。谢谢。我需要花一些时间熟悉动态SQL,但现在我想我将使用EF来拉入整个表,然后对FirstParam字段使用开关大小写,这意味着只传递一个参数,然后可以使用linq进行过滤。