1

我正在努力在我的 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 时我没有找到任何关于执行存储过程的好信息。

任何有关执行此任务的最轻松方式和/或最佳实践的见解将不胜感激。

4

2 回答 2

1

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

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

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

于 2012-08-29T19:24:20.263 回答
1

我的建议是使用动态 linq(和herehere)。您可以将有效的 linq 表达式作为常规字符串传递:

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

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

于 2012-08-29T19:50:33.303 回答