EF4:TPH,附加表格用于子类型

时间:2011-05-11 16:13:24

标签: c# entity-framework-4 modeling

我被赋予了使用Entity Framework 4建模实际数据库的任务。我面前的主要障碍是继承在数据库中建模的方式。

主要是一个带有扭曲的TPH(每个层次表):许多子类共享其他链接表。这些表对于几种子类型是通用的。

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_COUPONCDSLongCDSShortCDS进行实例化并充分保湿。

因此,类模型应该是这样的:

类图

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

使用NHibernate,我会做http://nhibernate.info/doc/nh/en/index.html#inheritance-mixing-tableperclass-tablepersubclass之类的事情。我无法用EF4来构建这个层次结构。任何的想法 ?非常感谢!

1 个答案:

答案 0 :(得分:0)

嗯,实际上根据指定的here是不可能的。我只是没有意识到这是同一个问题:/

我添加了表以匹配Table-Per-Class模型,主表上的触发器与其他表保持同步(我们有遗留代码,不使用EF来写数据)

@Ladislav:谢谢你的兴趣。