域模型映射

时间:2014-12-10 10:30:33

标签: c# entity-framework orm automapper valueinjecter

我有域模型和数据模型:

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

我想映射DoM<> DaM双向。我试过Automapper,但是我遇到了一个大问题,比如说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

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

如何使用automapper或valueinject进行操作?

2 个答案:

答案 0 :(得分:2)

您是否使用Entity Framework查看了Table Per Hierarchy映射?使用Car上的Type属性作为鉴别器,您可以将SportsCar和F1实体添加到数据模型中,Entity Framework将直接从数据库中检索它们。如果您真的想在域模型中使用单独的SportsCar和F1类,则可以使用AutoMapper。

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

答案 1 :(得分:1)

默认情况下,

valueinjecter将匹配源和目标之间相同名称和类型的所有属性,而不管类型如何 所以它会是这样的:

a.InjectFrom(b);

注意a和b已经存在,您需要提前创建

你可以在这里看到mvc项目中与EF一起使用的valueinjecter:http://prodinner.codeplex.com