使用Entity Framework实现存储过程的仓储模式

5
我正在尝试在我的vsto项目中使用仓储模式。 我该如何使用仓储模式来执行存储过程?我正在使用Entity Framework。任何提供代码示例的链接都将非常有用。
3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
6

在你的通用存储库中添加

public IEnumerable<T> ExecWithStoreProcedure(string query, params object[] parameters)
{
        return _context.Database.SqlQuery<T>(query, parameters);
}

然后您可以使用任何unitofwork/repository调用它,例如

IEnumerable<Products> products = 
             _unitOfWork.ProductRepository.ExecWithStoreProcedure(
             "spGetProducts @bigCategoryId",
             new SqlParameter("bigCategoryId", SqlDbType.BigInt) { Value = categoryId } 
      );

1
你如何将ProductRepository添加到_unitOfWork中?你能否提供一个_unitOfWork类的示例代码,说明它是如何在其中实现ProductRepository的? - HaBo
无法在数据库中找到 SqlQuery? - Sabri Meviş

4
您的代码库中的非通用解决方案如下:

在您的代码库中,一个非通用的解决方案是:

private int ExecWithStoreProcedure(string query, params object[] parameters)
{
   return _context.Database.ExecuteSqlCommand("EXEC " +  query, parameters);
}
然后是一些典型的使用示例:
var param = new SqlParameter("SomethingToCheck", SqlDbType.NVarChar) { Value = shortCode };            
var result = ExecWithStoreProcedure("mySchema.myStoredProc @SomethingToCheck", param);

带有多个参数:

var param1 = new SqlParameter("SomeCode", SqlDbType.VarChar) { Value = shortCode };
var param2 = new SqlParameter("User", SqlDbType.VarChar) { Value = userName };
var result = ExecWithStoreProcedure("mySchema.myStoredProc @SomeCode, @User",  param1, param2 );

1
这个链接指导了我。[链接] 但是当你执行存储过程时,你必须在SP名称前面加上"exec" 例如:如果SP是"sp_aa" 字符串应该是"exec sp_aa"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,