Code First调用存储过程

时间:2014-10-01 21:04:49

标签: c# sql sql-server stored-procedures ef-code-first

我正在使用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();
}

1 个答案:

答案 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
相关问题