|
Исключение по ForeignKeyConstraint
|
|||
---|---|---|---|
#18+
1. датасет в составе двух таблиц tblParents и tblChilds. связаны по полю parent_id (Guid) 2. приложение создает два потока thrReader и thrWriter. ридер читает даные из внешнего устройства в Queue<>. райтер выбирает их из очереди и: 2.1. отображает в контролах 2.2 записывает в датасет 3. запись в датасет в райтере происходит следующим образом: 3.1 по некоторому событию получаем новый guid, сохраняем его, создаем запись в tblParents c этим guid 3.2 все данные, выбираемые после этого из Queue пишем в tblChilds с этим guid 3.2 всё повторяется с п. 3.1 но время от времени в п.3.2.получаю исключение по ForeignKeyConstraint. т.е. новый запись с новым guid в tblParents записана, а при добавлении записей в tblChilds его не видно. в чем здесь у меня проблема, что я упустил? куски из кода Код: 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. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2011, 14:59 |
|
Исключение по ForeignKeyConstraint
|
|||
---|---|---|---|
#18+
Удаляйте из чилдрена, а потом из парента (если форин кей). Именно в такой последовательности. Что не понятно-то? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2011, 21:38 |
|
Исключение по ForeignKeyConstraint
|
|||
---|---|---|---|
#18+
ShSerge, не понятно, зачем надо удалять? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2011, 22:24 |
|
Исключение по ForeignKeyConstraint
|
|||
---|---|---|---|
#18+
zuuuShSerge, не понятно, зачем надо удалять? :) А записывайте именно в обратном порядке. :) Это я уже заработался. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2011, 22:29 |
|
Исключение по ForeignKeyConstraint
|
|||
---|---|---|---|
#18+
ShSerge, в этом и вопрос. пишется всё в нужном порядке впечатление, что запись в парент кешируется, и, при превышении некоторой скорости записи в чайлд, родительская запись ещё не видна при вставке дочерней ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2011, 22:38 |
|
Исключение по ForeignKeyConstraint
|
|||
---|---|---|---|
#18+
zuuu, Вообще-то это в одной транзакции надо делать. Ну, то есть, если инсертите одновременно и парент и чилд. Хотя, нет. Не обязательно. Самое главное, чтобы парент уже был в базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2011, 22:44 |
|
Исключение по ForeignKeyConstraint
|
|||
---|---|---|---|
#18+
И самое главное - смотрите в профайлер. Он ответит на все вопросы. Вы, наверное, туда и не заглядывали... . ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2011, 22:46 |
|
Исключение по ForeignKeyConstraint
|
|||
---|---|---|---|
#18+
поробуй aarentId c Guid.Empty сравнивать ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2011, 23:52 |
|
Исключение по ForeignKeyConstraint
|
|||
---|---|---|---|
#18+
всё вставляется в нужном порядке, сначала в парент, потом в чайлд. и гуид не пустой. эта ошибка проявляется именно тогда, когда эти операции выполняются подряд друг за другом. если пройти все пошагово в отладчике, ошибки нет. при прогоне выскакивает в случайные моменты подозреваю, дело в автоматическом управлении транзакциями. спасибо ShSerge за наводку. если промежуток между операциями мал, транзакция, в которой вставляется чайлд ещё не видит запись, вставленную в парент. поэтому при пошаговом выполнении всё нормально. вот, кстати, аналогичная проблема у человека http://www.sql.ru/forum/actualthread.aspx?tid=866861 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 12:11 |
|
|
start [/forum/topic.php?fid=17&fpage=42&tid=1350690]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
108ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 209ms |
0 / 0 |