我目前的项目涉及一个称为 SOQ 的领域概念。从概念上讲,SOQ 可以描述为具有以下属性:
- 位置类型
- 位置 ID
- 产品编号
- 供应商编号
- 日期
- 数量
- 地位
SOQ 如何在数据库中表示是完全不同的故事。
短版
获取类似于上述描述的 SOQ 对象涉及将表连接到自身并将一些列数据转换为行数据。
我目前的情况是我在实体框架中使用直接的表到对象映射,并且已经实现了“事后”的自联接和转置,这种转换的结果在第二个类中表示。
我想要的情况是查询 ObjectContext 只会返回一个很好的域对象,它隐藏了复杂的数据库表示。该对象将需要能够被读取并持久更新到数据库。我永远不会创建或删除这些对象。
这可能吗?
长版
- SOQ 可能存在于 fardaily 或 farweekly 两个数据库表之一中。
- 两个表都有一个由 LocationType、LocationId、ProductNumber、VendorNumber 和FieldType列组成的复合键。
- 这两个表也有许多列,如 DateNN:
- FarDaily 有列 Day01..Day28,
- FarWeekly 有列 Week01..Week65。
- 日期列的类型为十进制
- 给定行的 DateNN 列的值的含义由该行的 FieldType 列的值决定。
- Fieldtype 52 表示 DateNN 列包含 Qty 值
- 字段类型 54 表示状态值。
例如:
LocationType LocationID ProductNumber ... FieldType Day01 Day02 ...
100 S 999 52 5 2
100 S 999 54 0 1
这个(截断的)示例显示了两个 SOQ - 一个用于 Day01,一个用于 Day02。
- Day01 SOQ 的数量为 5,状态为 0。
- Day02 SOQ 的数量为 2,状态为 1。
更合理的表示是一行(或对象)代表一个 SOQ:
LocationType LocationID ProductNumber ... FieldType Day Qty Status
100 S 999 52 1 5 0
100 S 999 54 2 2 1
正如我上面提到的,我目前正在自己创建这样的对象。但我想知道是否有可能让实体框架为我做这件事?