2

我正在使用断开连接的 Entity Framework 4 对象上下文,并且感谢之前的一些很棒的帮助,我已经向前迈进了。

现在,我有更多的问题。在执行简单的 CRUD 时,似乎 EF 似乎制造了不必要的障碍。在这种情况下,父子关系。

在我的情况下,我有一个具有增值税率的现有增值税代码。我将其加载、显示并允许用户添加更多增值税率。所以我们最终得到:

增值税代码 --- 增值税(现有)
+- 增值税(由用户添加)

使用以下代码保存:

using (SopEntities sopEntities = EntitiesFactory.Create()) {
   VatRepository vatRepository = new VatRepository(sopEntities);

   foreach (VatRate vatRate in Item.VatRates) {
      if (vatRate.EntityKey == null || vatRate.EntityKey.IsTemporary) {
         sopEntities.VatRates.Attach(vatRate); 
         sopEntities.ObjectStateManager.ChangeObjectState(
            vatRate,
            System.Data.EntityState.Added
         );
      } else {
         sopEntities.VatRates.Attach(vatRate); // exception here
         sopEntities.ObjectStateManager.ChangeObjectState(
            vatRate,
            System.Data.EntityState.Modified
         );
      }
   }

   if (IsNew) {
      sopEntities.VatCodes.AddObject(Item);
   } else {
      sopEntities.VatCodes.Attach(Item);
      sopEntities.ObjectStateManager.ChangeObjectState(Item,System.Data.EntityState.Modified);
   }
   vatRepository.SaveChanges();
}

但是,当我保存时,我得到了异常:

具有临时 EntityKey 值的对象不能附加到对象上下文

我在下面附上了截图:

截屏

我自己在集合中手动附加/添加增值税率,以尝试确定哪个对象有问题。但是,这无济于事。显示的例外是在增值税代码中真实存在的增值税率,它已经有一个实体密钥。是不是 EF 正在将对象图加到增值税代码中,然后又回到另一个尚未设置的增值税率 - 因为我还没有得到它?

基本上,如何在断开连接的场景中保存增值税代码和其中包含的增值税率?

4

1 回答 1

0

当我发现这个错误时,是因为我的对象在静态修饰符下并且在另一个上下文中。

您可以检查您的代码以了解这种情况。希望这可以帮助 :)

于 2013-07-10T12:56:35.190 回答