2017-05-03 11 views
0

私のプロジェクトでは、StudentとBackpackエンティティがあります。バックパックは学生(1対多)を参照します。だから私はDBに学生の記録があり、それには2つのバックパックがあります。私はDBから学生を積み込み、バックパックの数を取得しています。その場合は2つ戻ってきます。リストに新しいバックパックを追加すると、コレクションから既存の2つのバックパックが削除されます。複雑さのために私のコードを投稿することはできません。私は何をしているのか説明しようとします。 BackpackのStudentリファレンス・プロパティー・セッターで、Student's Backpacksコレクションにバックパックが存在するかどうかをチェックしています。そうでなければ、リストにバックパックを追加します。次に、オブジェクトをEntity Frameworkコンテキストに追加します。ここではそのためのコードは次のとおりです。Entity Frameworkは、新しいアイテムを追加するときにコレクションから既存のアイテムを削除しています

 if (entity != null && EFContext.Entry(entity).State == EntityState.Detached) 
     { 
      try 
      { 
       var entityType = entity.GetType(); 
       GetObjectContext.AddObject(entityType.Name + "s", entity); 
      } 
      catch (Exception ex) 
      { 
       if (!ex.Message.Contains("Object references between two different object scopes are not allowed")) 
       { 
        throw; 
       } 
      } 
     } 

デバッガは、Entity Frameworkのは、リストから既存のオブジェクトを削除された投稿のコードの最初の行に当たります。私はまだ成功していない、単純なプロジェクトで同じ問題を再現しようとしているが、午前

enter image description here

:ここでは、コールスタックです。 EFがコレクションのナビゲーションプロパティからオブジェクトを削除する理由を知っている人は誰ですか?

答えて

0

変更してください。 GetObjectContext.AddObject(entityType.Name + "s"、エンティティ); GetObjectContext.AddObject(エンティティ)。

0

私は問題を把握しました。参照ナビゲーションプロパティにビジネスロジックがあり、ロード中に参照プロパティ値を設定できないという問題がありました。だから私はオブジェクトの状態を取得しようとしたときにそれをコレクションから削除していたのです。 私はバックパックで学生を読み込んだとき、Backpack.Studentプロパティはnullでした。私のコードに変更を加えた後で、参照プロパティが設定されていて、私が持っていた問題が修正されました。

関連する問題