|
Fluent NHibernate mapping, Parent-Child, ориентированный граф
|
|||
---|---|---|---|
#18+
Здравствуйте. Есть Оборудование Код: plaintext 1. 2. 3. 4.
Есть главное оборудование(Parent), а есть зависимое(Child). Parent может иметь несколько Child. Child может зависеть от нескольких Parent. Эти связи необходимо хранить. Мне важно, чтобы оборудование знало своих родителей и своих детей. Это всё похоже на ориентированнай граф. Я хочу это сделать вот так. Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Equipment: Id, Name, ... ; и допустим Communication: Parent_id, Child_id; Попробовал использовать HasManyToMany. Таблицы правильно создаёт, а вот с сохранением и извлечением данных не получается. Если писать вот так: Код: plaintext 1. 2. 3. 4. 5. 6.
Если же сделать вот так: Код: plaintext 1. 2. 3. 4. 5.
Вчём ошибка? Как должен выглядить мапинг? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2011, 14:23 |
|
Fluent NHibernate mapping, Parent-Child, ориентированный граф
|
|||
---|---|---|---|
#18+
smu127, Мне кажется, вы запутали себя логически. Рассматривайте Equipment как корневой элемент, владеющий двумя коллекциями Equipment. И мапить так: public EquipmentMapping() { Id(e => e.Id); Map(e => e.Name).Not.Nullable(); HasManyToMany(e => e.Children).Table("Communication").ParentKeyColumn("Parent_id").ChildKeyColumn("Child_id"); HasManyToMany(e => e.Parents).Table("Communication").ParentKeyColumn("Parent_id").ChildKeyColumn("Child_id"); } PS. Называть коллекции объектов единственным числом не комильфо. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2011, 15:20 |
|
Fluent NHibernate mapping, Parent-Child, ориентированный граф
|
|||
---|---|---|---|
#18+
SolYUtor, Попробовал сделать, как вы писали. В итоге в Communication также добавляется в 2 раза больше элементов. Только теперь нет повторяющихся записей. Вместо них появились зеркально отображенные. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2011, 19:09 |
|
Fluent NHibernate mapping, Parent-Child, ориентированный граф
|
|||
---|---|---|---|
#18+
smu127, Я так понимаю, вы хотите чтобы обе связи в коллекции падали в одну строчку в с таблице Communication? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2011, 10:38 |
|
Fluent NHibernate mapping, Parent-Child, ориентированный граф
|
|||
---|---|---|---|
#18+
SolYUtor, Да. Примерно так. Попробовал сделать вот так: Код: 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.
В таблице Communication на связь Parent-Child будет только одна запись. Можно ли получить такой же эффект используя HasManyToMany и не создавая класса Communication? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2011, 12:39 |
|
Fluent NHibernate mapping, Parent-Child, ориентированный граф
|
|||
---|---|---|---|
#18+
smu127, не буду говорить однозначно, но простых способов не знаю, надо рыть. Я бы остановился на вашем варианте. Он прост и понятен. PS. Communication - это конечно связь, но подразумевает под собой передачу информации. Для связи между объектов лучше использовать название Relation. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2011, 15:44 |
|
Fluent NHibernate mapping, Parent-Child, ориентированный граф
|
|||
---|---|---|---|
#18+
SolYUtor, Спасибо за советы, и помощь в решении проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2011, 15:48 |
|
Fluent NHibernate mapping, Parent-Child, ориентированный граф
|
|||
---|---|---|---|
#18+
Оказалось, что последний вариант маппинга работает не правильно. Дело в том, что в моём тесте я не всё проверял. Записывалось в базу правильно, но при загрузке Parent и Child менялись местами. Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2011, 13:10 |
|
|
start [/forum/topic.php?fid=17&fpage=44&tid=1350769]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 160ms |
0 / 0 |