Entity framework 存储过程的EF 6.Database.SqlQuery只返回存储过程的字符串
返回的结果只是传递给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
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;
}