|
|
|
Fluent NHibernate мэппинг vs. разные типы наследования
|
|||
|---|---|---|---|
|
#18+
Есть 4 класса: Document Contract : Document ContractWithCompany : Contract ContractWithPerson : Contract В базе для этого заведены 2 таблицы: Documents (ID, ...) Contracts (FK_DOCUMENT, CONTRACT_TYPE,....) где FK_DOCUMENT - ссылка на ID (стратегия наследования TABLE-PER-SUBCLASS) CONTRACT_TYPE - текстовое поле с указанием класса ( стратегия наследования TABLE-PER-CLASS-HIERARCHY). Если по отдельности обе эти стратегии наследования работают, однако не получается совместить их вместе - в одной цепочке наследования. То есть, пишу мэппинг (Fluent NHibernate 1.0 RTM): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2010, 15:56 |
|
||
|
Fluent NHibernate мэппинг vs. разные типы наследования
|
|||
|---|---|---|---|
|
#18+
А зачем вам дискриминатор в таблице Contracts? Он у вас будет в таблице Document, а с Contract будет связь 1-1. В соответствующих подклассах замапите только нужные поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 17:55 |
|
||
|
Fluent NHibernate мэппинг vs. разные типы наследования
|
|||
|---|---|---|---|
|
#18+
SolYUtorА зачем вам дискриминатор в таблице Contracts? Он у вас будет в таблице Document, а с Contract будет связь 1-1. В соответствующих подклассах замапите только нужные поля. В том-то и вопрос - мне не нужен дискриминатор в таблице Document, т.к. для стратегии наследования Table-per-subclass он не нужен. Достаточно только наличие связи 1:1 между столбцом ID в таблице DOCUMENT и столбцом FK_DOCUMENT в таблице CONTRACT. Кроме контрактов будет еще несколько подклассов от документа. А уже в таблице CONTRACT хотелось бы с помощью столбца с дескриминатором разделять все контракты на несколько подклассов, хранимых в одной этой таблице (Table-per-class-hierarchy). Вот это и не понимаю как реализовать... p.s. Возможно я вас неправильно или не до конца понял... Не могли бы вы пояснить на примере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2010, 10:47 |
|
||
|
Fluent NHibernate мэппинг vs. разные типы наследования
|
|||
|---|---|---|---|
|
#18+
SolYUtor, правильно ли я понимаю, что вы предлагаете хранить все свойства подклассов контракта в таблице Document? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2010, 10:48 |
|
||
|
Fluent NHibernate мэппинг vs. разные типы наследования
|
|||
|---|---|---|---|
|
#18+
barser В том-то и вопрос - мне не нужен дискриминатор в таблице Document, т.к. для стратегии наследования Table-per-subclass он не нужен. Достаточно только наличие связи 1:1 между столбцом ID в таблице DOCUMENT и столбцом FK_DOCUMENT в таблице CONTRACT. Кроме контрактов будет еще несколько подклассов от документа. А уже в таблице CONTRACT хотелось бы с помощью столбца с дескриминатором разделять все контракты на несколько подклассов, хранимых в одной этой таблице (Table-per-class-hierarchy). Вы неправильно понимаете стратегию Table-per-Subclass. В этой стратегии дискриминатор храниться только в таблице корневого класса, а остальные таблицы связаны с это отношением 1:1. barser правильно ли я понимаю, что вы предлагаете хранить все свойства подклассов контракта в таблице Document? Нет, я хочу сказать, что ваша задача и так решена: в таблице Document у вас храниться ID объекта и его дискриминатор. А в таблице Contract будут лежать три наследованных класса. Будет то же, что вы и хотите, только дискриминатор лежит в Document, и связан с ней 1:1. Просто замапьте их на эту через joined subclass, не забывая оставить поля nullable. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2010, 13:39 |
|
||
|
|

start [/forum/topic.php?fid=17&fpage=55&tid=1351193]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
| others: | 215ms |
| total: | 374ms |

| 0 / 0 |
