C# 如何在EF6中将参数传递给SP

C# 如何在EF6中将参数传递给SP,c#,.net,asp.net-mvc,entity-framework-6,C#,.net,Asp.net Mvc,Entity Framework 6,我使用的是从教程文本中获得的模式。我使用的是EF6,首先是数据库。这是一种存储库模式。我不知道如何将参数传递给SPs 有一个名为EFRepository的类,其中包含按ID返回完整表或记录的示例,如下所示: public class EFRepository<T> : IRepository<T> where T : class { public EFRepository(DbContext dbContext) { if (dbConte

我使用的是从教程文本中获得的模式。我使用的是EF6,首先是数据库。这是一种存储库模式。我不知道如何将参数传递给SPs

有一个名为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存储库

   public virtual IQueryable<T> GetBySpParams(List<System.Data.SqlClient.SqlParameter> myParams)
    {
        return DbSet.Find(myParams);
    }
在界面中使用此选项:

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

但这是行不通的。非常感谢您的帮助。

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

 /* 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();

那么到底是什么不起作用呢?您没有显示如何使用EF调用SP。Find方法接受一个或多个对象,并通过ID搜索单个记录。它不调用任何SP。从我的api中,我可以调用GetAll或GetByID并传递一个int。我不能做或不知道如何做的是调用存储的Proc并传递参数。例如,我可以调用var model=Uow.GetAll.OrderBym=>m.Address.Selectm=>newContractedPropertyListModelLif如果您首先执行数据库,您应该有一个模型,一个.edmx文件?您可以从数据库更新模型以包含SP,并像调用函数DbContext一样调用SP。SPNamep1、P2模型具有SP。模式实现存储库和接口的方式是我的问题。return DbContext.SqlQueryExec YourStoreProcedureName@startDate、@endDate、myParams.ToList;错误CS1061“DbContext”不包含“SqlQuery”的定义,并且找不到接受“DbContext”类型的第一个参数的扩展方法“SqlQuery”。是否缺少using指令或程序集引用?抱歉。我更改了答案以解决该错误。基本上,DBContext的数据库属性有几个方法,允许您使用SQL命令。更好的解决方案是使用一种异步方法。下面是指向数据库类的链接: