域模型映射

本文关键字:映射 模型 | 更新日期: 2023-09-27 18:33:45

我有域模型和数据模型:

  • 域模型 (DoM) 专为业务层设计,以简化操作。
  • 数据模型 (DaM) 是使用实体框架从数据库自动生成的。

我想在两个方向上映射 DoM <> DaM。我试过自动映射器,但我遇到了一个大问题,比如 DaM 数据模型有一个实体 Car,它是数据库表的直接转换

Car
{
   Type {get; set;}
   MaxSpeed {get; set;}
}

域模型 DoM 具有以下结构:

Car
{
   MaxSpeed {get; set;}
}
SportsCar : Car
{
}
F1 : SportsCar 
{
}

映射应该是:

if (DaM.Car(car).Type == Type.SportsCar)
   DaM.Car.MaxSpeed > 350 ? map DaM.car to DoM.F1 : map DaM.car to DoM.SportsCar

存档的最佳方法/工具是什么?

如何使用自动映射器或值注入来做到这一点?

域模型映射

您是否使用实体框架查看了每个层次结构的表映射?使用 Car 上的 Type 属性作为鉴别器,可以将 SportsCar 和 F1 实体添加到数据模型,实体框架将直接从数据库中检索它们。然后,如果您确实希望在域模型中拥有单独的跑车和 F1 类,则可以使用 AutoMapper。

http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph

默认情况下,

值注入器将匹配从源到目标的所有相同名称和类型的属性,无论类型如何所以它会是这样的:

a.InjectFrom(b);

注意 A 和 B 已经存在,您提前创建它们

您可以在此处查看 MVC 项目中与 EF 一起使用的值注入器:http://prodinner.codeplex.com