我正在使用CodeFirst和我的程序的存储库模式。我用作上下文的数据库有一个我在SQL Server Management Studio中创建并测试的存储过程,名为dbo.sp_InsertTrackingInfo
。
在我的基础知识库类中,我有
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 :(得分: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