在数据层和逻辑层之间映射/转换数据

时间:2016-09-16 15:51:16

标签: c# automapper

我一直试图在任何地方找到这个答案,并且觉得我一定不知道我需要的正确关键词,所以我希望能在这里找到答案。

所以我正在建立一个连接的项目:

数据库<>数据层<>逻辑层<>用户界面

当数据进入逻辑层时,我试图进行轻微的转换。首先,我将演示代码,然后解释我正在尝试做什么。

我在数据层中有一个'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; }
}

现在,有了这些信息,我要做的是创建一个自动化或某种形式的转换,允许我自动将GenderDto.Name与PersonDto.GenderID匹配。我基本上想要:

PersonDto.GenderID = GenderDto.Name,其中GenderDto.GenderID == PersonDto.GenderID

并反转此映射。

最终目标是在UI层中,用户可以提取一个人的个人资料,并会看到如下内容:

  • 名字:John
  • 姓氏:Doe
  • 性别:男

用户还可以在表单中输入相同的信息,然后将该信息传递给逻辑层,逻辑层又将性别名称转换回GenderID,以便将其存储在数据库中。

非常感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:5)

您还可以查看AutoMapper中的自定义投影。麻烦的是如果这些预测需要访问其他EF的东西,那么你就麻烦了。

您的DAO看起来几乎与您的DTO完全一样吗?如果是这样,我完全避开DTO,他们可能不会添加任何价值。只需直接使用您的DAO。

通常我的DTO是EF中我的实体的一小部分,只是视图模型的几个属性。我并不真正反转地图,因为我的视图模型代表任务/命令。我不会尝试构建一个分层的架构 - 它的价值并不高。很多类型的回报都不多。

答案 1 :(得分:0)

你想要的是对象关系映射。这就是Entity Framework实现的目标。您可以实现像Entity Framework之类的东西,也可以自己编写关系映射逻辑。