10

我使用 Entity Framework 4.2 并想调用具有输入参数的存储过程。我Database.ExecuteSqlCommand用来调用存储过程。

但是,文档缺少正确的调用语法,以便正确映射参数。我的 google-foo 让我失望了,任何帮助都将不胜感激。

即我有一个程序

procedure SetElementFrequency
  @ElementTypeID integer,
  @Frequency float
as ...

我试过用

Database.ExecuteSqlCommand("exec SetElementFrequency @p0 @p1", 
                            elementType, frequency);

Database.ExecuteSqlCommand("exec SetElementFrequency {0} {1}", 
                            elementType, frequency);

但它们都失败,出现错误Incorrect syntax near '@p1'。

4

3 回答 3

16

根据您的底层数据库提供程序,您可以使用以下任一方法。

Database.ExecuteSqlCommand(
    "exec SetElementFrequency {0}, {1}",
    elementType, frequency); 

或者

Database.ExecuteSqlCommand("exec SetElementFrequency ?, ?", elementType, frequency); 

您还可以指定elementTypefrequencyas DbParameter-based 对象以通过该ParameterName属性提供您自己的名称。

于 2012-06-20T17:06:29.743 回答
2

尝试这样的事情:

context.Database.ExecuteSqlCommand("delete MasterSmsCampaignCertificateInfo where      MasterSmsCampaignGuid = @p0 and CertificateId = @p1",
TheCampaignGuid,
certInfo.CertificateId);

看看这个类似的问题: ExecuteSqlCommand with output parameter 最好的问候

于 2012-06-20T14:48:04.147 回答
2
var sql = @"Update [User] SET FirstName = {0} WHERE Id = {1}";
ctx.Database.ExecuteSqlCommand(sql, firstName, id);
于 2012-06-20T14:49:12.987 回答