私の現在のプロジェクトには、SOQ と呼ばれるドメインの概念が含まれています。概念的には、SOQ は次の属性を持つものとして説明できます。
- 場所の種類
- ロケーションID
- 製品番号
- 仕入先番号
- 日にち
- 数量
- 状態
データベースで SOQ がどのように表現されるかは、まったく別の話です。
ショートバージョン
上記の説明のような SOQ オブジェクトを取得するには、テーブルをそれ自体に結合し、一部の列データを行データに転置する必要があります。
私の現在の状況は、Entity Framework で直接テーブルからオブジェクトへのマッピングを使用しており、「事後」に自己結合と転置を実装しており、この変換の結果が 2 番目のクラスで表されています。
私が望んでいる状況は、ObjectContext をクエリすると、複雑なデータベース表現を隠す適切なドメイン オブジェクトが返されるということです。このオブジェクトは、読み取り可能で、データベースへの更新を保持できる必要があります。これらのオブジェクトを作成または削除することは決してありません。
これは可能ですか?
ロングバージョン
- SOQ は、fardaily または farweekly の 2 つのデータベース テーブルのいずれかに存在する場合があります。
- どちらのテーブルにも、LocationType、LocationId、ProductNumber、VendorNumber、およびFieldType列で構成される複合キーがあります。
- どちらのテーブルにも、DateNN のような名前の列が多数あります。
- FarDaily には Day01..Day28 という列があります。
- FarWeekly には、列 Week01..Week65 があります。
- 日付列は Decimal 型です
- 特定の行の DateNN 列の値の意味は、その行の FieldType 列の値によって決まります。
- Fieldtype 52 は、DateNN 列に Qty 値が含まれていることを意味します
- Fieldtype 54 はステータス値を意味します。
例えば:
LocationType LocationID ProductNumber ... FieldType Day01 Day02 ...
100 S 999 52 5 2
100 S 999 54 0 1
この (切り捨てられた) 例は、Day01 用と Day02 用の 2 つの SOQ を示しています。
- Day01 SOQ の数量は 5 で、ステータスは 0 です。
- Day02 SOQ の数量は 2 で、ステータスは 1 です。
より賢明な表現は、1 つの行 (またはオブジェクト) が 1 つの SOQ を表すものです。
LocationType LocationID ProductNumber ... FieldType Day Qty Status
100 S 999 52 1 5 0
100 S 999 54 2 2 1
上で述べたように、私は現在そのようなオブジェクトを自分で作成しています。しかし、Entity Framework でこれを行うことができるかどうか疑問に思っています。