質問

CodeFirst EF-4.1ベースのプログラムがあります。ユーザーはコンテキストを取得し、一部のプロパティを変更できます。ユーザーが完了したら、私は簡単にやります

ChangeTracker.Entries().Any(e => e.State != EntityState.Unchanged);

aのかどうかを判断します SaveChanges() 必要かどうか。 「SaveChanges()」の呼び出しを行うと、データベースに加えられた変更が持続します。

これは一部のプロパティで機能し、他のプロパティでは機能しません。具体的には、単純なタイプで動作するようです(floats)、およびコレクション階層(ObservableCollections)。

私は何か間違ったことをしていますか?

役に立ちましたか?

解決

はい、これは問題です。いくつかの関係は追跡されていません DbChangeTracker. 。には違いがあります 独立協会と外国キー協会. 。関係の変更は、次の場合に追跡されます。

  • efv4+の常に外部キー関連である1対1の関係
  • 外国のキー協会との1対多くの関係 - 外部キープロパティを設定する必要があります

関係の変更は、次の場合に追跡されません。

  • 独立協会との1対多い関係
  • 常に独立した関連性である多くの多くの関係

独立した協会のために追跡されていないことは、正しい命名ではありません。これらの変更は追跡されますが DbChangeTracker これらの変更へのアクセスを公開しません!変換する必要があります DbContextObjectContext そして使用します ObjectStateManager アクセスするため ObjectStateEntries 独立した協会を表す。

この場合、最も簡単なことは単に呼び出すことです SaveChanges いつも。データを保存する必要がない場合、DBコマンドは実行されません。

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