次の構造のEntityFrameworkPOCOがあります。
public class Entity
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
ビューで使用するこのエンティティのデータ転送オブジェクトを作成しました。
public class EntityDto
{
public int Id { get; set; }
public string Name { get; set; }
}
これで、Global.asaxファイルに次のマッピングコードが含まれています。
Mapper.CreateMap<Entity, EntityDto>();
Mapper.CreateMap<EntityDto, Entity>(); // not sure whether I need this as well?
すべてが正常に機能しています。DTOをビューに渡してOKで、モデルEntity
からの新しいインスタンスを作成できます。;EntityDto
を編集しようとすると問題が発生します。Entity
これは、オブジェクトへの変更を追跡するためにEFが作成するエンティティキーをAutoMapperが失うことによるものであることを認識していますが、いくつかのソースを読んだだけでは、決定的な解決策はないようです。エンティティを編集するために使用しているアクションは次のとおりです。
public ActionResult EditEntity(EntityDto model)
{
var entity = context.Entities.Single(e => e.Id == model.Id);
entity = Mapper.Map<EntityDto, Entity>(model); // this loses the Entity Key stuff
context.SaveChanges();
return View(model);
}
さて、これを解決するにはどうすればよいですか?できますか:
- どういうわけかAutoMapperに
.Ignore()
エンティティキーのプロパティを伝えますか? - AutoMapperを入手してエンティティキーのプロパティをコピーしますか?
.Attach()
マップEntity
して状態を変更に設定しましたか?
どんな助けでも常に感謝します。