EF4: TPH с дополнительной таблицей для подтипов - PullRequest
0 голосов
/ 11 мая 2011

Передо мной была поставлена ​​задача моделирования реальной базы данных с использованием 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. Любая идея ? Большое спасибо!

1 Ответ

0 голосов
/ 17 мая 2011

Ну, на самом деле это невозможно, как указано здесь .Я просто не осознавал, что это тот же вопрос: /

Я добавил таблицы, соответствующие модели Table-Per-Class, с триггером на главной таблице для синхронизации других (у нас есть устаревший код, которыйне будет использовать EF для записи данных)

@ Ladislav: спасибо за ваш интерес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...