代码之家  ›  专栏  ›  技术社区  ›  Tor Haugen

更新自跟踪实体时出错

  •  3
  • Tor Haugen  · 技术社区  · 15 年前

    self-tracking WCF客户机服务器应用程序中的实体。我的WCF服务返回各种实体,这些实体可以使用相应的更新方法进行更新。

    这很好的工作了一段时间,但现在我有问题。为了保持重点,我将把这个讨论限制在一个特定的案例中,简化为最基本的内容。

    我的一个表叫做SystemDefinition。它没有外键,但另一个表(路由)有外键。因此,它在实体模型(称为路由)中有一个导航属性。所有其他列都是标量。表和相应的实体有一个名为Id的主键列,类型为Guid。数据库是sqlservercompactv3.5。

    1. 在客户机中,对实体调用MarkAsDeleted()

    UpdateSystem()中的代码很简单(为了清楚起见,删除了非必需的代码):

    _objectContext.SystemDefinitions.ApplyChanges(system);
    _objectContext.SaveChanges();
    

    检索实体时不使用Include()子句,这意味着Routes集合为空(无论如何,如果Route中没有具有SystemDefinition外键的行,则仍会发生错误)。所以我传递给Update方法的SystemDefinition实体是 图中只有实体 . 但我还是有以下例外:

    无效操作异常: 对象的键值与 中的另一个对象 在调用之前,键值是唯一的

    第一个方法调用(ApplyChanges)引发异常。我确信ObjectContext是新的,为每个方法调用创建一个新的。

    我已经把代码调试到它抛出的地方了ObjectContext.FixupKey,但是代码对我来说没有什么意义,而且在微软的源代码中也没有注释来说明导致它的实际情况。

    当然,这个信息是误导性的?只有一个实体参与了更新。会发生什么事?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Peter Lillevold Rene    15 年前

    我怀疑你的 _objectContext

    要解决这个问题,你只需确保你总是在一个新的环境下工作。

    推荐文章