使用精巧的人映射多个子对象

时间:2017-10-25 21:00:38

标签: c# oracle dapper

我有一系列需要返回给调用者的实体。在某些情况下,他们需要A类,有些是B类,有些是A类和B类。数据是相关的,都来自一个表,并且有相当数量的列。当前代码调用A,将其映射到C.ClassOfA,调用B并将其映射到ClassOfB。我当然可以撤消这个混乱,但是我想通过一次调用将A和B作为C返回,但我正在与Dapper挣扎(可能是因为这不能做到)。我知道如果A引用B我可以使用多映射返回所有,但事实并非如此。另外,Oracle数据库(这不是我最强的诉讼)如果重要的话。假设我的两种类型是:

class A
  int InventoryOnHand {get;set;}
  int ProjectedSales {get;set;}
class B
  int ExpectedReturns{get;set;}
  int ProjectedProduction{get;set;}

class C
  A ClassOfA{get;set;}
  B ClassOfB{get;set;}

我可以构建我动态使用的查询并且可以返回每种类型但我无法弄清楚如何映射C使得返回A和B的查询映射到C.我改为。这可能吗?

TIA

1 个答案:

答案 0 :(得分:0)

如果我理解得很好,你想要返回包含ClassA / B对象的C类对象。即ClassC中的嵌套类。

你考虑过看看Slapper: https://github.com/SlapperAutoMapper/Slapper.AutoMapper

会将小巧玲珑的数据映射回你的课程吗?

oracle sql看起来如下所示,你可以为选定的列添加别名,以便它们映射/对应你classA / classB上的属性名称:

select a.value1 as ClassOfA_InventoryOnHand, 
   a.ProjectedSales as ClassOfA_ProjectedSales, 
   b.ExpectedReturns as ClassOfB_ExpectedReturns, 
from a, b