|
Двойная связь
|
|||
---|---|---|---|
#18+
Доброго времени суток! Пишу диплом по проектированию АИС... Для создания базы данных использую EF Code-first. В базе есть две сущности: Пользователь и Задание Пользователь может создать сколько угодно Заданий, а в задании может быть сколько угодно исполнителей. Для этого должно быть 2 разные связи между таблицами, чтобы можно было определять кто создал задание и кто должен его исполнять. Проблема возникла, когда я попытался их связать, вот код классов: Код: c# 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68.
Естественно при этом EF создал 1 связь "Многие ко многим", а мне нужно 2 разные связи! Подскажите как это сделать? Заранее спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2014, 15:37 |
|
Двойная связь
|
|||
---|---|---|---|
#18+
Чтобы было понятнее, прилагаю файл с концептуалдьной схемой базы данных. Повторюсь, проблема со связями между сущностями Пользователь и Задание. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2014, 19:01 |
|
Двойная связь
|
|||
---|---|---|---|
#18+
__Pavel__, Введите по 2 свойсва: например такие. public virtual List<User> CreateUsers { get; set; } public virtual List<User> ExecuteUsers { get; set; } И, соответсвенно, 2 поля для задач в User. Правда не знаю, как их замапить между собой с помощью атрибутов. Через Fluent Mapping можно ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2014, 19:35 |
|
Двойная связь
|
|||
---|---|---|---|
#18+
__Pavel__, И кстати, как я понял, автор то у задачи 1. Так что вам нужна 1 связь "один ко многим" для автора задачи и одна "многие ко многим" для исполнителей? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2014, 19:51 |
|
Двойная связь
|
|||
---|---|---|---|
#18+
Lelouch, да, получается в схеме ошибка ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2014, 20:03 |
|
Двойная связь
|
|||
---|---|---|---|
#18+
Lelouch, Да, вы правы, можно через Fluent API. Я указал явно все сложные связи, но возникла проблема в другом... Вот код указания связей: Код: c# 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
Вот на всякий случай коды сущностей: Код: c# 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124.
При создании базы вылетает ошибка ОшибкаIntroducing FOREIGN KEY constraint 'FK_dbo.ProblemDocuments_dbo.Documents_Document_DocumentID' on table 'ProblemDocuments' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Вот прикладываю новую схему и на ней видно, что цикличности не может быть... при удалении Пользователя , сотрутся и Задачи назначенные им и созданные Документы , а он ругается на каскадное удаление между Документами и Задачами ... я что-то не понимаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2014, 13:41 |
|
Двойная связь
|
|||
---|---|---|---|
#18+
Забыл приложить схему... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2014, 13:42 |
|
Двойная связь
|
|||
---|---|---|---|
#18+
__Pavel__, Уберите WillCascadeOnDelete(true); У вас сейчас удаление пользователя может привести к "cycles or multiple cascade paths." ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2014, 14:07 |
|
Двойная связь
|
|||
---|---|---|---|
#18+
Lelouch, но почему!? так ведь и должно быть, нет? удаляем пользователя и удаляются все задачи и документы... это логично или я не прав? и если убрать WillCascadeOnDelete(true); , то ошибка остается, нужно явно указывать false как параметр. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2014, 14:18 |
|
Двойная связь
|
|||
---|---|---|---|
#18+
__Pavel__, "удаляем пользователя и удаляются все задачи и документы" Удаляем пользователя -> Удаляются привязки пользователей к задачам и задачи -> При удалении задач удаляются привязки пользователей к задачам Это одна и та же сущность (таблица). Вот он и ругается. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2014, 16:01 |
|
Двойная связь
|
|||
---|---|---|---|
#18+
Lelouch, мозгов не хватает, вт и ругается нет там никакого цикла на экземплярном уровне ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2014, 13:38 |
|
Двойная связь
|
|||
---|---|---|---|
#18+
ViPRos, а как можно при создании таблицы гарантировать отсутствие такого цикла в данных? с точки зрения задачи ТС не сказано, что нельзя самому себе поставить задачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2014, 14:37 |
|
|
start [/forum/topic.php?fid=17&fpage=20&tid=1349805]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
123ms |
get tp. blocked users: |
2ms |
others: | 258ms |
total: | 496ms |
0 / 0 |