|
NHibernate - как создать связь один-к-одному?
|
|||
---|---|---|---|
#18+
Добрый день, Интересуюсь мнением специалистов, Мы хотим сделать в NH следующее: У объекта есть коллекция подобъектов, замаплена как 1:М bidirectional, с одной стороны Cascade.All(), с другой Inverse() Есть поле в объекте - текущий подобъект из коллекции. Мы хотим, чтобы это все мапилось. Притом создаются сразу 2 несохраненных объекта: главный и один подобъект. Таким образом, сначала в коллекции один элемент. Поле "текущий" смотрит на него же. А потом пытаемся сохранить. NH выдает ошибку: not-null property references a null or transient value <lalal> Так как у главного объекта 2 поля: "текущий эл" (reference, not null, он-то и выдает ошибку) и "коллекция". А у подобъекта одно поле "родитель", оно связано с коллекцией. Когда ставим полю "текущий эл" not-null, все работает и сохраняется. Но это же нехорошо - реально оно никогда не null, просто иногда указывает на несохраненный объект. Вот маппинги, типы я назвал Main и Sub Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Вот маппинги Fluent Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Черные стрелочки - коллекция, зеленые - элементы коллекции указывают на родителя, так как Inverse, то за сохранение отвечает именно поле с зеленой стрелочкой (по его значению судят о вхождении или невхождении элемента в коллекцию, а не по черной стрелке), синяя - текущий элемент коллекции, вот когда я ее добавил, проблемы и возникли. Как замапить такую ситуацию в NHibernate ?? Ведь здесь есть гуру, я точно знаю! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2011, 15:16 |
|
NHibernate - как создать связь один-к-одному?
|
|||
---|---|---|---|
#18+
зачем вам bidirectional ??? выкиньте его нафиг, это туго потдерживается ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2011, 15:57 |
|
NHibernate - как создать связь один-к-одному?
|
|||
---|---|---|---|
#18+
NHibernate_User_, код классов давайте, и как сохраняете. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2011, 16:27 |
|
NHibernate - как создать связь один-к-одному?
|
|||
---|---|---|---|
#18+
SolYUtor, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
На момент сохранения Sub указывает на Main, коллекция внутри Main состоит из 1 элемента Sub, и на него же указывает поле CurrentSub. Сохраняем просто, через UnitOfWork. К сожалению, его писал не я. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2011, 20:00 |
|
|
start [/forum/topic.php?fid=17&fpage=42&tid=1350678]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 127ms |
0 / 0 |