C# 如何在EF6中将参数传递给SP
我使用的是从教程文本中获得的模式。我使用的是EF6,首先是数据库。这是一种存储库模式。我不知道如何将参数传递给SPs 有一个名为EFRepository的类,其中包含按ID返回完整表或记录的示例,如下所示: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
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命令。更好的解决方案是使用一种异步方法。下面是指向数据库类的链接: