我被赋予了使用实体框架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