CodeFirst调用存储过程
本文关键字:存储过程 调用 CodeFirst | 更新日期: 2023-09-27 18:25:20
我正在为我的程序使用CodeFirst和存储库模式。我用作上下文的数据库有一个存储过程,我在SQLServerManagementStudio中创建并测试了它,名为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();
}
如果过程只执行插入语句,则可以使用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