2014-10-01 500 views
1

我爲我的程序使用CodeFirst和存儲庫模式。我用作上下文的數據庫有一個我在SQL Server Management Studio中創建和測試的存儲過程,名爲dbo.sp_InsertTrackingInfoCodeFirst調用存儲過程

在我的基地倉庫類我有

public IEnumerable<T> ExecWithStoreProcedure(string query, int id) 
{ 
    return _context.Database.SqlQuery<T>("sp_InsertTrackingInfo @estimate", new SqlParameter("estimate", id)); 
} 

在管理工作室的作品,其中估計被定義爲一個整數

EXEC sp_InsertTrackingInfo @estimate = '14' 

所有操作與此例外取得工作中使用此查詢所以我知道我指向了正確的位置,我已經檢查過SQL Server Profiler,並且在調用此函數的任何時候都不會調用此過程。

任何人都有這方面的經驗?

感謝, Bmckie

編輯:

在倉庫的一個

using (var uow = UnitOfWorkManager.Begin()) 
{ 
    uow.EstimateTrackingRepository.Insert(t); 
    uow.EstimateTrackingRepository.ExecWithStoreProcedure("exec sp_InsertTrackingInfo @estimate", t.EstimateId); 
    uow.Commit(); 
} 
+0

哪個代碼調用'ExecWithStoreProcedure'? – 2014-10-01 21:08:42

+0

我將它添加到編輯 – 2014-10-01 21:10:03

+0

我認爲你需要在'SqlQuery'之後或者在調用'ExecWithStoreProcedure'後執行類似'ToArray()'的查詢,程序是否在插入語句之後選擇查詢?如果它只是一個插入語句,可能你可以使用'ExecuteSqlCommand'。 – 2014-10-01 21:16:22

回答

1

如果程序只是做一個INSERT語句中,可以使用ExecuteSqlCommand

int rowsAffected = _context.Database 
    .ExecuteSqlCommand("sp_InsertTrackingInfo {0}", id); 

如果是select語句,你需要執行查詢,因爲它是一個延遲(延遲)執行,直到東西需要它。

var items = _context.Database 
    .SqlQuery<T>("sp_InsertTrackingInfo {0}", id) 
    .ToArray(); // or FirstOrDefault() or Any() etc 
+0

第一個會這樣做。非常感謝 :) – 2014-10-02 02:20:51