我一直试图在任何地方找到这个答案,并且觉得我一定不知道我需要的正确关键词,所以我希望在这里找到答案.
所以我正在建立一个连接的项目:
数据库<>数据层<>逻辑层<> UI
当数据进入逻辑层时,我试图进行轻微的转换.首先,我将演示代码,然后解释我正在尝试做什么.
我在数据层中有一个'PersonDao'对象,具有以下设置:
public class PersonDao
{
public int PersonID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int GenderID { get; set }
}
Run Code Online (Sandbox Code Playgroud)
和一个'GenderDao'对象具有以下内容:
public class GenderDao
{
public int GenderID { get; set; }
public string Name { get; set; } //this essentially holds 'male' and 'female'
}
Run Code Online (Sandbox Code Playgroud)
在逻辑层中,我在逻辑层中有一个镜像数据层的'PersonDto'对象:
public class PersonDto
{
public int PersonID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int GenderID { get; set }
}
Run Code Online (Sandbox Code Playgroud)
当然还有一个"GenderDto"对象,它反映了数据层中的对应物
public class GenderDao
{
public int GenderID { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,有了这些信息,我想要做的是创建一个自动化或某种形式的转换,允许我自动将GenderDto.Name与PersonDto.GenderID匹配.我基本上想要:
PersonDto.GenderID = GenderDto.Name,其中GenderDto.GenderID == PersonDto.GenderID
并反转此映射.
最终目标是在UI层中,用户可以拉取一个人的个人资料,并会看到如下内容:
用户还可以在表单中输入上述相同的信息,该表单将该信息传递给逻辑层,逻辑层又将性别名称转换回GenderID,以便将其存储在数据库中.
非常感谢任何帮助,谢谢.
您还可以查看AutoMapper中的自定义投影.麻烦的是,如果这些预测需要访问其他EF的东西,那你就麻烦了.
您的DAO看起来几乎与您的DTO完全一样吗?如果是这样,我会完全避免DTO,他们可能不会添加任何价值.只需直接使用您的DAO.
通常,我的DTO是EF中我的实体的一小部分,只是视图模型的几个属性.我并没有真正反向地图,因为我的视图模型代表任务/命令.我不会尝试构建一个分层的架构 - 它没有多大价值.很多类型的回报都不多.