我被賦予了使用實體框架4建模實際數據庫的任務。在我面前的主要障礙是模式繼承在DB中建模。EF4:TPH和子類型附加表
它主要是一個扭曲的TPH(Table Per Hierarchy):許多子類型共享額外的鏈接表。這些表格對幾個亞型是通用的。
DB圖
|===============|
| ASSET |
| asset_id |
| asset_type |
=================
1| 1|
| |
| -----------------------------------
1| |
|=========================| |
| ASSET_WITH_COUPON | |
| asset_id | |
| ... | |
|=========================| |
1| 1| |
| | |
| | |
1| 1| 1|
|============| |============| |============|
| CDS | | LOAN | | EQUITY |
| asset_id | | asset_id | | asset_id |
| ... | | ... | | ... |
|============| |============| |============|
可能對於ASSET.asset_type
值:
- 權益
- TermLoan
- RevolverLoan
- LongCDS
- ShortCDS
- 等
這意味着表LOAN
用於類型TermLoan
和RevolverLoan
,並且一個需要的表ASSET
,ASSET_WITH_COUPON
和CDS
到實例化和完全水合一個LongCDS
或ShortCDS
。因此
類模型應該是這樣的:
類圖
|===============|
| AbstractAsset |
|===============|
Δ Δ
| |
| -------------------------------------------------------
| |
|=========================| |
| AbstractAssetWithCoupon | |
|=========================| |
Δ Δ |
| | |
| ------------------------ |
| | |
|=============| |==============| |========|
| AbstractCDS | | AbstractLoan | | Equity |
|=============| |==============| |========|
Δ Δ Δ
| | |
| --------- |
| | |
|=========| |==========| |==========|
| LongCDS | | ShortCDS | | TermLoan |
|=========| |==========| |==========|
使用NHibernate,我會做類似http://nhibernate.info/doc/nh/en/index.html#inheritance-mixing-tableperclass-tablepersubclass。我無法用EF4來構建這個層次結構。任何想法 ?非常感謝 !
這是什麼意思,亞型有鏈接表?這是否意味着另一層次的繼承或關係? – 2011-05-11 22:09:59
是的,子類型與特定數據共享一張表。我將接受一個解決方案作爲有效答案_without_ AbstractAssetWithCoupon或AbstractCDS。 – Manu 2011-05-12 08:25:57