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