3

DbEntityEntry.CurrentValues.SetValues()メソッドを使用して、エンティティ以外のDTOからの値で既存のエンティティを更新しやすくしようとしています(http://blogs.msdn.com/b/adonet/archive/2011/01を参照)。 /30/using-dbcontext-in-ef-feature-ctp5-part-5-working-with-property-values.aspx

ただし、DbEntityEntryへの依存関係を削除するのに問題があります(モック、テスト用)。これが私がやりたいことの例です:

var entity = dbSet.Find(dto.Id);
var entry = context.Entry(entity);
entry.CurrentValues.SetValues(dto);
context.SaveChanges();

私も考慮しました:

EntityType entity = new EntityType() { Id = dto.Id };
context.Attach(entity);
var entry = context.Entry(entity);
entry.CurrentValues.SetValues(entity);
context.SaveChanges();

実際のDbContextを操作する場合、両方を見つけることができたのは妥当なようですが、コンテキストをIMyContextに抽象化すると、エンティティのDbEntityEntryを取得する機能が失われ、SetValuesオプションが失われます。

この問題を回避する方法はありますか、それとも、弾丸を噛んで、DTOからエンティティに変更されたプロパティを手動で設定する必要がありますか(多くのプロパティを持つエンティティの場合、多くの定型文になる可能性があります)?

(私はEFにかなり慣れていないので、これが私の最初のStackOverflowの質問なので、優しくしてください)

4

1 に答える 1

0

これまでに使用したことがない場合、これはAutoMapper (NuGet からも利用可能) の優れた使用方法です。IMyContext の問題を解決する方法がわかりません。プロパティのマッピングにも頼ります。しかし、手動で行う代わりに、AutoMapper に面倒な作業を任せます。

于 2011-11-28T20:48:11.953 に答える