将一个DTO映射到多个实体

时间:2013-08-26 14:09:46

标签: entity-framework domain-driven-design automapper dto

我有以下数据库模型。在这里,我描述了EF模型中的实体:

   public class Person
   {
      public int Id { get; set; }
      public int AddressId { get; set; }
      public int RoleId { get; set; }
      public string Name { get; set; }
      public string Email { get; set; }
   }

   public class Address
   {
      public int Id { get; set; }
      public int CountryId { get;set; }
      public string City { get; set; }
   }

   public class Role
   {
      public int Id { get; set; }
      public string Name { get; set; }
   }

   public class Country
   {
      public int Id { get; set; }
      public string Name { get; set; }
   }

在前端,我有管理界面,可以编辑用户信息。 因此,在每个网格线中,我显示以下DTO对象:

   public class SystemUser
   {
      public string UserName { get; set; }
      public string Email { get; set; }
      public string City { get; set; }
      public string Country { get; set; }
      public string Role { get; set; }
   }

我遇到的主要问题 - 在执行编辑后将这个映射回实体的最佳方法是什么?我使用AutoMapper或其他东西重新获得DTO?

或者我在这里做一些完全愚蠢的事情?

编辑: 我还有另一个挑战:我希望尽量减少到DB的往返。

1 个答案:

答案 0 :(得分:1)

我发现AutoMapper是创建我的视图模型等的绝佳选择。保存时我发现使用带有Save(SystemUser user)等方法的Service类是最好的,因为这样你就有了控制验证的空间其他必须做的事情。用于创建需要保存的实体的映射代码是手工完成的,因为通常在保存中涉及的内容比在读取中涉及的要多得多。因此AutoMapper在这里不是一个好选择。我通常用它的构造函数中的各种实体编写我的服务类和存储库。这更多是为了允许你没有提到的单元测试,但无论如何都是一个好的设计。如果这是你需要的那种东西,那么我认为你走在正确的轨道上。