2

切断されたEntityFramework4 Object Contextを使用していますが、以前はすばらしいヘルプがあったおかげで、前進しました。

今、私はもっと問題があります。EFは、単純なCRUDを実行するときに不要な障壁を作成しているようです。この場合、親子関係。

私の状況では、VatRatesを持つ既存のVatCodeがあります。これをロードして表示し、ユーザーがVatRatesを追加できるようにします。したがって、最終的には次のようになります。

VatCode --- VatRate(既存)
+-VatRate(ユーザーが追加)

次のコードを使用してこれを保存します。

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値を持つオブジェクトは、オブジェクトコンテキストにアタッチできません

以下にスクリーンショットを添付しました。

スクリーンショット

コレクション内にVatRatesを手動でアタッチ/追加して、問題のあるオブジェクトを特定しようとしています。ただし、これは役に立ちません。示されている例外は、VatCode内の本物の既存のVatRateであり、すでにエンティティキーがあります。EFがオブジェクトグラフをVatCodeにステップアップし、まだ設定されていない他のVatRateに戻っている可能性があります-私はまだそれに到達していないためですか?

基本的に、切断されたシナリオ内でVatCodeとそれに含まれるVatRatesを保存するにはどうすればよいですか?

4

1 に答える 1

0

このエラーが見つかったのは、オブジェクトが静的修飾子の下にあり、別のコンテキストにあったためです。

この状況については、コードを確認してください。お役に立てれば :)

于 2013-07-10T12:56:35.190 に答える