2011-05-11 44 views
0

我被賦予了使用實體框架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用於類型TermLoanRevolverLoan,並且一個需要的表ASSETASSET_WITH_COUPONCDS到實例化和完全水合一個LongCDSShortCDS。因此

類模型應該是這樣的:

類圖

|===============| 
| AbstractAsset | 
|===============| 
    Δ  Δ 
    |  | 
    |  ------------------------------------------------------- 
    |                | 
|=========================|          | 
| AbstractAssetWithCoupon |          | 
|=========================|          | 
    Δ     Δ           | 
    |     |           | 
    |     ------------------------     | 
    |          |     | 
|=============|      |==============|   |========| 
| AbstractCDS |      | AbstractLoan |   | Equity | 
|=============|      |==============|   |========| 
    Δ  Δ        Δ 
    |  |        | 
    |  ---------      | 
    |    |      | 
|=========| |==========|   |==========| 
| LongCDS | | ShortCDS |   | TermLoan | 
|=========| |==========|   |==========| 

使用NHibernate,我會做類似http://nhibernate.info/doc/nh/en/index.html#inheritance-mixing-tableperclass-tablepersubclass。我無法用EF4來構建這個層次結構。任何想法 ?非常感謝 !

+0

這是什麼意思,亞型有鏈接表?這是否意味着另一層次的繼承或關係? – 2011-05-11 22:09:59

+0

是的,子類型與特定數據共享一張表。我將接受一個解決方案作爲有效答案_without_ AbstractAssetWithCoupon或AbstractCDS。 – Manu 2011-05-12 08:25:57

回答

0

那麼,實際上這是不可能的,如指定here。我只是沒有意識到這是同一個問題:/

我添加了表來匹配Table-Per-Class模型,主表上的觸發器保持與其他的同步(我們有遺留的代碼不會用EF寫數據)

@Ladislav:謝謝你的關注。