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();
}

CodeFirst调用存储过程

如果过程只执行插入语句,则可以使用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