数据层和逻辑层之间的数据映射/转换
本文关键字:数据 映射 转换 之间 | 更新日期: 2023-09-27 18:07:13
我一直在到处寻找这个答案,感觉我一定不知道我需要的正确关键词,所以我希望在这里找到答案。
所以我正在建立一个项目,有这样的连接:
数据库<>数据层<>逻辑层<> 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 }
}
和一个'GenderDao'对象,具有以下内容:
public class GenderDao
{
public int GenderID { get; set; }
public string Name { get; set; } //this essentially holds 'male' and 'female'
}
在逻辑层中,我在逻辑层中有一个"PersonDto"对象,它反映了数据层:
public class PersonDto
{
public int PersonID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int GenderID { get; set }
}
当然还有一个'GenderDto'对象,它反映了数据层中的对应对象
public class GenderDao
{
public int GenderID { get; set; }
public string Name { get; set; }
}
现在,有了这些信息,我要做的是创建一个自动映射或某种形式的转换,使我能够自动匹配性别。姓名到个人。性别。我想要:
PersonDto。性别id =性别id。性别所在的名称。性别id ==个人。GenderID
和反向映射。
最终目标是在UI层中,用户可以拉出一个人的个人资料,并将看到如下内容:
- 名字:John
- 姓氏:Doe
- 性别:男性
用户还可以在上面的表单中输入相同的信息,该表单将该信息传递给逻辑层,逻辑层将反过来将性别名称转换回性别id,以便将其存储在数据库中。
您还可以在AutoMapper中查看自定义投影。问题是,如果这些投影需要访问其他EF的东西,你就有麻烦了。
你的dao看起来和你的dto几乎一模一样吗?如果是这样,我会完全避免dto,它们可能不会增加任何价值。直接使用dao。
通常我的dto是EF中实体的一个小子集,只是视图模型的一些属性。我没有真正反向映射,因为我的视图模型表示任务/命令。我不会尝试构建一个分层的体系结构,因为它没有太多的价值。类型多,回报少。
你想要的是对象关系映射。这就是实体框架的作用。您可以实现类似实体框架的东西,或者您必须自己编写关系映射逻辑。