Entity framework 存储过程的EF 6.Database.SqlQuery只返回存储过程的字符串

Entity framework 存储过程的EF 6.Database.SqlQuery只返回存储过程的字符串,entity-framework,stored-procedures,Entity Framework,Stored Procedures,返回的结果只是传递给SQLQuery的字符串 var beginDt = new DateTime(2014, 03, 17); string beginDtStr = beginDt.ToString("yyyy-MM-dd"); var callParams = new object[] { dbName

返回的结果只是传递给SQLQuery的字符串

             var beginDt = new DateTime(2014, 03, 17);
                string beginDtStr = beginDt.ToString("yyyy-MM-dd");
                var callParams = new object[]
                {
                    dbName
                    , true
                    , 4
                    , 5 //   @EntityAffiliateTypeID 
                    , "Test Name "
                    , "Empty Note" /
                    , "5192223333"
                    , "5193334444"
                    , "bing@bing.com"
                    , "59 London Rd"
                    , null
                    , 8
                    , "Sarnia"
                    , 53
                    , "N7T2B1"
                    , 6
                    , 2
                    , null
                    , null
                    , null
                    , beginDtStr
                    , null
                    , "Another Testname"
                    , "5192223333"
                    , "5193334444"
                    , "email@domain.com"
                    , null
                    , null
                };

              var result2 = db.Database.SqlQuery<int>(
                    "EXEC SPEntityAffiliateInsert {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}, {13}, {14}, {15}, {16}, {17}, {18}, {19}, {20}, {21}, {22}, {23}, {24}, {25}, {26}, {27}",
                    callParams
                    );
这就像为字符串生成select语句:

SELECT 'EXEC SPEntityAffiliateInsert {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}, {13}, {14}, {15}, {16}, {17}, {18}, {19}, {20}, {21}, {22}, {23}, {24}, {25}, {26}, {27}';
那么,如何让它真正调用存储过程呢

(我已经试过了: var result2=db.Database.SqlQuery( “SPEntityAffiliateInsert{0}、{1}、{2}、{3}、{4}、{5}、{6}、{7}、{8}、{9}、{10}、{11}、{12}、{13}、{14}、{15}、{16}、{17}、{18}、{20}、{21}、{22}、{23}、{

及 var result2=db.Database.SqlQuery( “行政长官, )
这里的问题之一是,调用SP的常规方法不起作用;此SP使用Return语句来表示单个整数值。所有正常的EF SP调用约定都希望得到IEnumerable兼容的结果,因此我必须采取不同的行动-不允许我更新SP

该字符串未被解释为命令,因为SP未被架构限定。我还将其更新为与在查询窗口中运行时完全相同:

var commandSQL = "DECLARE @return_value int; " +
      "EXEC @return_value = [dbSchemaName].[SPEntityAffiliateInsert] " +
       "@ParamXName = {0} ; SELECT 'Return Value' = @return_value;";
t然后叫它:

   IEnumerable<int> results = db.Database.SqlQuery<int>(commandSQL, strParams.ToArray()).ToList();
                    foreach (int result in results)
                    {
                        model.expectedresultsfromDBfield = result;
                        //only looking for one result...(could have called FirstOrDefault, I suppose...
                        break;
                    }
IEnumerable results=db.Database.SqlQuery(commandSQL,strParams.ToArray()).ToList();
foreach(结果中的int结果)
{
model.expectedresultsfromDBfield=结果;
//只寻找一个结果…(我想可能会调用FirstOrDefault。。。
打破
}
一切正常

   IEnumerable<int> results = db.Database.SqlQuery<int>(commandSQL, strParams.ToArray()).ToList();
                    foreach (int result in results)
                    {
                        model.expectedresultsfromDBfield = result;
                        //only looking for one result...(could have called FirstOrDefault, I suppose...
                        break;
                    }