如何在EF中使用context.Database.SqlQuery <t>来执行包含sql函数的sql查询

时间:2016-07-13 07:20:14

标签: sql entity-framework

请参阅以下代码。

System.Windows.Forms

运行以下错误时显示。

为过程或函数RetrieveLabors提供的参数数量不足。 请注意,该函数有两个参数,值都在那里。

我尝试过以下所有其他方式:

public static int Sum(int[][] arr) 
{
    int total = 0;
    for (int i = 0; i < arr.GetLength(0); i++)
    {
         for (int j = 0; j < arr.GetLength(1); j++) 
         { 
              total += arr[i][j];
         }
    } 
    return total; 
}

static void Main(string[] args)
{
     int[][] arr = new int[][] 
     {
          new int [] {1},
          new int [] {1,3,-5},
     };
     int total = Sum(arr);
     Console.WriteLine();
     Console.ReadKey();    
}

它仍然无法正常工作。错误如下:

另一个SqlParameterCollection已经包含了SqlParameter。

这是我的问题还是EF的?

2 个答案:

答案 0 :(得分:0)

如果您使用的是MSSQL - 您必须指定该函数的所有者,例如:

select [UserName], [TotalCost], [TotalHours]"
            + " FROM dbo.[RetrieveLabors](1, 1)

答案 1 :(得分:0)

The SqlParameter is already contained by another SqlParameterCollection.

Value = parameters.FirstOrDefault(x => x.Name == "CultureId").Value ?? DBNull.Value

向我建议你不恰当地重复使用'参数'集合。您应该做的是在执行时创建一个新的SqlParameter;更喜欢;

var existingCultureParameter = parameters.FirstOrDefault(x => x.Name == "CultureId");
SqlParameter newCultureParameter;
if (existingCultureParameter != null) {
    newCultureParameter = new SqlParameter("CultureId", existingCultureParameter.Value);
} else {
    newCultureParameter = new SqlParameter("CultureId", DbNull.Value);
}

大致相似的东西。您只是想避免在不同的查询中重复使用相同的参数。在您的代码中,解决方案可能更优雅。