【问题标题】:ObjectContext.ExecuteStoreCommand, how to clear parameters between calls?ObjectContext.ExecuteStoreCommand,如何清除调用之间的参数?
【发布时间】:2011-02-11 14:37:12
【问题描述】:

我使用不同的命令和不同的参数多次调用 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());

【问题讨论】:

  • 你能发布你的代码吗?听起来您正在重用一个应该在每次使用后丢弃的对象。
  • @Shiraz Bhaiji,我更新了导致异常的区域。事实上我不想处理任何东西,所有这些都是事务的一部分,该事务有 10 次调用 .ExecuteStoreCommand()

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


【解决方案1】:

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

试试这个

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);

【讨论】:

  • 我知道,在直接 ADO.NET 中,我会在调用之间简单地调用 Parameters.Clear(),但我没有看到通过实体框架公开的此类功能。简单地创建两个包含相同精确参数的不同对象似乎是解决这个问题的最后手段,你不觉得吗?
  • 似乎以某种方式将参数连接到存储过程,因此不允许您同时将其用于 2 个过程。
猜你喜欢
  • 2013-08-09
  • 2020-05-23
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
相关资源
最近更新 更多