私はProject
オブジェクトを持っています。これは多くのネストされたオブジェクトで構成されています。 DBへのこのオブジェクトを保存するにはAutoMapperはChangeTrackerを混乱させます
:
- 私は(テストとして)私のプロジェクトの中に一つだけの特性を変更し、私のDALにそれを渡します。
- 既存のプロジェクトをEFでDBからロードします。
- 変更したプロジェクトを既存のプロジェクトにマップします。
var existingProject =
db.Project.Single(p => p.ID == changedProject.ID).Include(p => p.Something);
existingProject = Mapper.Map(changedProject, existingProject);
db.SaveChanges();
これは、私が変更トラッカをドリルダウンするとき、私はそれは非常に混乱だ見ることができるので驚くべきことではないnullの外部キーに失敗します。
var added = db.ChangeTracker.Entries().Where(e => e.State == EntityState.Added);
マッピングが取り後プロジェクト内の膨大な数のオブジェクトは追加されたものとしてマークされます(プロジェクトに何も追加または削除されていなくても、1つのプロパティのみが変更されています)。
AutoMapperはネストされたオブジェクトの新しいインスタンスを作成し、EFはこれをDBの既存のオブジェクトに関連付けることができないためですか?
私はこのアプローチを多くの場所で提案してきましたが、AutoMapperがChangeTrackerと連携して上記を理解できるようにする方法があるのでしょうか?
私はAutoMapper 3.3.1.0を使用していますが、これは有望な感謝のようですので、更新する必要があります。 – FBryant87
これは違いがありましたが、ChangeTrackerの多数のエンティティは以前と同じように 'Added'とは対照的に 'Modified'としてマークされています。それらは変更されていないとマークする必要があります。おそらくEFはマッピングのためにオブジェクトへの変更を認識しますか? – FBryant87
私はSQLをチェックし、そこに問題がある場合はgithubに報告しますが、それ以外の場合はokとしてください。 –