2016-09-23 95 views
-1

我正在使用一種模式,可以從教程文本中獲得這些模式。我使用EF6,數據庫優先。它是一個存儲庫模式。我無法弄清楚如何將參數傳遞給SP。如何將參數傳遞給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庫

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

那麼究竟是什麼不起作用?你沒有展示你如何用EF調用SP。 'DBSet.Find'方法接受一個或多個對象並通過id(s)搜索單個記錄。它不會調用任何SP。 – vittore

+0

從我的api中,我可以調用GetAll或GetByID並傳遞一個int。我不能做的(或不知道如何做的)就是調用一個存儲過程並將其傳遞給Params。例如,我可以調用var model = Uow。 GetAll()。OrderBy(m => m.Address).Select(m => new ContractedPropertyListModel – ebick

+1

如果你在做數據庫,應該有一個模型,一個.edmx文件?您可以從數據庫更新模型以包含SP並調用SP,就像函數'DbContext.SPName(p1,p2)' – Brandon

回答

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(); 
+0

return DbContext.SqlQuery (「Exec YourStoreProcedureName @startDate,@endDate」,myParams).ToList();錯誤\t CS1061 \t'DbContext'確實不包含'SqlQuery'的定義,並且沒有可以找到接受類型'DbContext'的第一個參數的擴展方法'SqlQuery'(你缺少using指令還是程序集引用?) – ebick

+0

對不起。解決了這個錯誤的答案。基本上,DBContext的Database屬性有幾個允許你擦SQL命令的方法。更好的解決方案是使用一種異步方法。 – Sparrow

+0

這裏是數據庫類的鏈接:https://msdn.microsoft.com/en-us/library/system.data.entity.database(v=vs.113).aspx – Sparrow