ObjectContext.ExecuteStoreCommand,如何清除调用之间的参数?

时间:2011-02-11 14:37:13

标签: c# asp.net entity-framework entity-framework-4

我使用不同的命令和不同的参数多次调用ObjectContext.ExecuteStoreCommand,尽管我对几个命令使用相同的参数列表(对象)。我得到以下例外:

System.ArgumentException: The SqlParameter is already contained by another SqlParameterCollection.

有没有办法在调用之间清除参数,就像直接使用ADO.NET一样?

更新了代码示例:

    string sqlDeleteWebUserGreen = "delete WebUserGreen where WebUserId = @WebUserId";
    string sqlDeleteWebUserBlue = "delete WebUserBlue where WebUserId = @WebUserId";

    var argsDeleteWebUserXref = new DbParameter[] {
        new SqlParameter { ParameterName = "WebUserId", Value = user.WebUserId }

    rowsAffectedDeleteWebUserXref += base.context.ExecuteStoreCommand(sqlDeleteWebUserGreen, argsDeleteWebUserXref);
    rowsAffectedDeleteWebUserXref += base.context.ExecuteStoreCommand(sqlDeleteWebUserBlue, argsDeleteWebUserXref);

更新

基本上我无法找到更好的方法,所以我最终接受了以下答案。唯一的区别是我只是将参数的创建放在一个单独的方法中,所以我的调用看起来像base.context.ExecuteStoreCommand(sqlDeleteWebUserBlue, MethodThatWillGiveMeTheParameterArray());

1 个答案:

答案 0 :(得分:2)

问题是你使用了两次相同的参数。

试试这个

var argsDeleteWebUserXref1 = new DbParameter[] {         new SqlParameter { ParameterName = "WebUserId", Value = user.WebUserId }  

var argsDeleteWebUserXref2 = new DbParameter[] {         new SqlParameter { ParameterName = "WebUserId", Value = user.WebUserId }  

rowsAffectedDeleteWebUserXref += base.context.ExecuteStoreCommand(sqlDeleteWebUserGreen, argsDeleteWebUserXref1);      
rowsAffectedDeleteWebUserXref += base.context.ExecuteStoreCommand(sqlDeleteWebUserBlue, argsDeleteWebUserXref2);