2011-05-11 49 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:谢谢你的关注。