質問

SaveChangesを使用するときに多対1のリレーションシップが保存され、次のエラーが発生しないようにプロパティを設定する方法を教えてください。

非常に簡単です。1つのAdTypeに多くの広告があるAdとAdTypeがあります。広告にプロパティがあります:

public class Ad
{
   public Int32 AdTypeId { get; set; }
   public virtual AdType AdType { get; set; }
}

この関係をカバーするには。

これを行うとき:

someAd.AdType = someAdType;

プロパティは適切に設定されていますが、AdTypeIdは正しく設定されていません。しかし、これは保存しても大丈夫だと思うので心配はありません。

context.SaveChanges();

この時点で問題は、AdTypeプロパティに割り当てられたオブジェクトを使用してAdTypeId列に何を挿入すべきかを判断する代わりに、AdTypeId列に0の値を保存しようとしています(外部キーの問題の原因)。

知っていること:

  • この時点で、someAdTypeは 永続化/ IDを持っています。
  • AdTypeプロパティが正しく設定されています。
  • AdTypeIdは0です。
  • データベースに外部キー関係があります。
  • AdTypeIdは主キーです。
  • 遅延/遅延読み込みをtrueに設定しました

遅延読み込みを許可するように設定されているため、AdTypeを実際に変更しようとしませんでした。

役に立ちましたか?

解決

Okは、プロキシ化されていない(その単語を作成しました... Yah)"スナップショットベースの変更追跡"を使用しているため、アプローチ、システムはそれが変更されたという本当の考えを持っていません。

  

この例では、顧客は純粋です   POCOタイプ。 EntityObjectまたは   IPOCOベースのエンティティ、変更を行う   エンティティに自動的に   状態マネージャーの同期を保つ   自動通知はありません   純粋なPOCOエンティティと   Entity Framework。したがって、   状態マネージャーに問い合わせて、考えている   顧客オブジェクトの状態は   持っていても変わらない   のいずれかに明示的に変更を加えた   エンティティのプロパティ。

ここからわかりました

したがって、変更があったかどうかを確認するために、 SaveChangesメソッドを使用したAcceptAllChangesAfterSave オプション。

context.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);

そしてそれは動作します。うまくいけば私はそれを正しく理解します...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top