Передо мной была поставлена задача моделирования реальной базы данных с использованием Entity Framework 4. Основным препятствием передо мной является способ наследования в БД.
В основном это TPH (таблица на иерархию) с изюминкой: многие подтипы совместно используют дополнительные связанные таблицы. Эти таблицы являются общими для нескольких подтипов.
Диаграмма БД
|===============|
| 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
:
- Equity
- 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. Любая идея ? Большое спасибо!