如何在EF6中将Params传递给SP

时间:2016-09-23 16:01:20

标签: c# .net asp.net-mvc entity-framework-6

我正在使用我从教程文本中获取的模式。我正在使用EF6,数据库优先。它是一个存储库模式。我无法弄清楚如何将参数传递给SP。

有一个名为EFRepository的类,其中包含返回完整表的示例或按ID记录,如下所示:

public class EFRepository<T> : IRepository<T> where T : class
{
    public EFRepository(DbContext dbContext)
    {
        if (dbContext == null)
            throw new ArgumentNullException("dbContext");
        DbContext = dbContext;
        DbSet = DbContext.Set<T>();
    }

    protected DbContext DbContext { get; set; }
    protected DbSet<T> DbSet { get; set; }
    public virtual IQueryable<T> GetAll()
    {
        return DbSet;
    }

    public virtual T GetById(int id)
    {
        return DbSet.Find(id);
    }

接口类如下所示:

public interface IRepository<T> where T : class
{
    //To query using LINQ
    IQueryable<T> GetAll();
    //Return by ID
    T GetById(int id);

我尝试将其添加到EF Repository

   public virtual IQueryable<T> GetBySpParams(List<System.Data.SqlClient.SqlParameter> myParams)
    {
        return DbSet.Find(myParams);
    }

在界面中使用:

    IQueryable<T> GetBySpParams(List<System.Data.SqlClient.SqlParameter> myParams);

但这不起作用。非常感谢协助。

1 个答案:

答案 0 :(得分:0)

这是使用参数调用存储过程的方法:

 /* Declare your parameters and their values */
 SqlParameter[] myParams = new SqlParameter[2];
 myParams[0] = new SqlParameter("startDate", startDate);
 myParams[1] = new SqlParameter("endDate", endDate);


 return dbContext.Database.SqlQuery<YourReturnDataType>("Exec YourStoreProcedureName @startDate, @endDate", myParams).ToList();