ObjectContext.ExecuteStoreCommand, как очистить параметры между вызовами? - PullRequest
3 голосов
/ 11 февраля 2011

Я делаю несколько вызовов 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 Ответ

2 голосов
/ 11 февраля 2011

Проблема в том, что вы используете один и тот же параметр дважды.

попробуйте это

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...