2015-03-31 31 views
0

我遇到了實體框架(EF)中ExecuteSqlCommand()方法的問題。我有以下SQL Server存儲過程:實體框架ExecuteSqlCommand缺少輸入參數

EXEC SomeSchema.SomeTableInsert 
@Id = 1, 
@SomeData = 'This is some random data', 
@UserId = 500 

它的工作原理沒有任何問題。當我嘗試使用EF的ExecuteSqlCommand()方法中,我得到以下錯誤:

Procedure or function 'SomeTableInsert' expects parameter '@UserId', which was not supplied. 

下面是C#代碼:

var sql = "SomeSchema.SomeTableInsert @Id, @SomeData, @UserId"; 
var sqlParameters = new List<SqlParameter> 
{ 
    new SqlParameter("@Id", 1), 
    new SqlParameter("@SomeData", "This is some random data"), 
    new SqlParameter("@UserId", 500) 
}; 

dbContext.Database.ExecuteSqlCommand(sql, sqlParameters.ToArray<object>()); 

我不明白爲什麼我得到這個錯誤。 UserId參數不會丟失,並且具有有效值。有任何想法嗎?

更新:

這裏是SQL Server上運行SQL:

exec sp_executesql 
    N'SomeSchema.SomeTableInsert @Id, @SomeData, @UserId', 
    N'@Id int,@SomeData nvarchar(5),@UserId int', 
    @Id=1, 
    @SomeData='This is some random data', 
    @UserId=500 
+1

它的工作原理,如果youwrite它像'ExecuteSqlCommand(SQL,新的SqlParameter( 「@ ID」,1), 新的SqlParameter( 「@ SomeData」, 「這是一些隨機數據」), 新的SqlParameter(「@ UserID「,500);'? – 2015-03-31 20:15:11

+0

我試過了,它仍然失敗,我相信它是生成的SQL的東西 – Halcyon 2015-03-31 21:04:26

回答

1
var sql = "SomeSchema.SomeTableInsert @Id, @SomeData, @UserId"; 
var sqlParameters = new List<SqlParameter> 
{ 
    new SqlParameter("Id", 1), 
    new SqlParameter("SomeData", "This is some random data"), 
    new SqlParameter("UserId", 500) 
}; 

dbContext.Database.ExecuteSqlCommand(sql, sqlParameters.ToArray<object>()); 

從內部的SqlParameter刪除@前綴。

+0

這沒有什麼區別,請參閱我編輯生成的SQL – Halcyon 2015-03-31 21:03:58

+0

您是否刪除了@prefix 。你生成的SQL仍然顯示它。 – 2015-03-31 21:13:47