私は現在、以下の技術を使用するプロジェクトに取り組んでいます。
- ASP.netMVC-プレゼンテーション層
- データサービス層-(WCF)
- 自動マッパーを使用したデータ転送オブジェクト(DTO)レイヤー
- ドメインレイヤー(POCO、Code First Entity Framework)
- リポジトリレイヤー+EntityFramework 4.3+DbContext。
DTOを使用して、自動マッパーを使用してドメインオブジェクトを変換し、WCFサービスを使用してフロントエンドに送信します。
また、リクエストごとにWCFレイヤーでリクエストごとのDBContextを作成しており、WCFサービスコンテキストは、クライアント側のDTOでの呼び出しごとおよび追跡なしの有効化によって構築されており、完全に切断されています。
また、以下のオブジェクトグラフがあります。
public class User : BaseEntity
{
public virtual Identity Identity { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public int IdentityId { get; set; }
public virtual IList<Group> Groups{ get; set; }
}
public class Identity : BaseEntity
{
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual IList<Email> Emails { get; set; }
public virtual IList<PhoneNumber> PhoneNumbers { get; set; }
}
私たちのDto構造は、ドメインと比較して同じです。
私の質問:
オブジェクトグラフを更新する場合例:UpdateUser(User user) ; Entity Frameworkの最良のアプローチは何ですか?
ここで、単一の関数を使用してナビゲーションデータを保存します。例:UpdateEmail(userId、Email)(関係ではなくプリミティブデータのみを保存します)。したがって、1つのUnitOfWorkを検討すると、データベースに多くの挿入と更新が行われます。
現在の実装は次のとおりです
public void UpdateUser(User user)
{
UpdateEmail(user.userId, user.Idenity.Emails);
UpdatePhone(user.userId, user.Identity.PhoneNumbers);
etc.............
UpdateUser(user);
UnitOfWork.Commit();// Calling DbContext.SaveChanges();
}
オブジェクトグラフが切断されている上記の状況でEntityFrameworkで使用できるパターンまたはベストプラクティスはありますか?