|
Не обновляется DomainDataSource.Data при удалении записи
|
|||
---|---|---|---|
#18+
Приложение на silverlight 4, VS 2010. Есть связанные DataGrid и DataForm с единым источником данных DomainDataSource: Код: 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.
Добавление и изменение записей обрабатывается в EditEnded DataForm: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Удаление записи - в DeletingItem DataForm: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Проблема в том, что при удалении записи не обновляется personalInfoDomainDataSource.Data, т.е. в базе данных записи уже нет, а на странице она все ещё отображается. Причем такое поведение проявляется только при удалении только что добавленной записи (старые записи удаляются нормально). В чем моя ошибка? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 12:35 |
|
Не обновляется DomainDataSource.Data при удалении записи
|
|||
---|---|---|---|
#18+
Такое поведение проявляется в FireFox. Если тестировать в IE вылетает сообщение об ошибке: The specified entity is not contained in this EntitySet. at System.ServiceModel.DomainServices.Client.EntitySet.Remove(Entity entity) at System.Windows.Controls.PagedEntityCollectionView.RemoveCore(Entity item, Int32 index) at System.Windows.Controls.PagedEntityCollectionView.RemoveIndex(Int32 index) at System.Windows.Controls.EntityCollectionView.RemoveAt(Int32 index) at System.Windows.Controls.DomainDataSourceView.RemoveAt(Int32 index) at System.Windows.Controls.DataForm.DeleteItem() at System.Windows.Controls.DataForm.OnDeleteItemButtonClick(Object sender, RoutedEventArgs e) at System.Windows.Controls.Primitives.ButtonBase.OnClick() at System.Windows.Controls.Button.OnClick() at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e) at System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e) at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName) Скорее всего это из-за того, что ключевое поле ID для PersonalInfo генерируется автоинкрементом в БД. Поэтому при добавлении новой записи ID устанавливается в 0, в контексте запоминается запись с ID=0. А когда пытаемся удалить эту запись уже подтягивается новый ID из БД, из-за чего и возникает несоответствие. Отсюда вопрос: как это обойти? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 14:13 |
|
Не обновляется DomainDataSource.Data при удалении записи
|
|||
---|---|---|---|
#18+
Balda_1, нет, ваше предположение не верно, это из-за того, что вы используете более одного DomainContext в вашем приложении, поищите в этой ветке форума, я описывал как реализовать один единственный DomainContext. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 15:32 |
|
Не обновляется DomainDataSource.Data при удалении записи
|
|||
---|---|---|---|
#18+
Если использовать один DomainDataSource, то в DataForm не подгружаются связанные данные, отображаемые в ComboBox'ах. Для отображения связанных данных именно комбобоксами, а не текстбоксами, которые подтягиваются автоматом, я использую следующий код: Код: 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.
Кроме того, в режиме редактирования, при поыптке изменить значения в комюоюоксах вылетает ошибка: Entity 'FamilyStatus : 1' cannot be attached to this EntityContainer because it is already attached to another EntityContainer. at System.ServiceModel.DomainServices.Client.EntityContainer.CheckCrossContainer(Entity entity) at System.ServiceModel.DomainServices.Client.EntityRef`1.set_Entity(TEntity value) at TestEmployees.Web.Models.PersonalInfo.set_FamilyStatu(FamilyStatu value) Как можно реализовать нормальное отображения связанных данных комбобоксами без задания шаблона отображения DataForm вручную? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 16:45 |
|
Не обновляется DomainDataSource.Data при удалении записи
|
|||
---|---|---|---|
#18+
Balda_1, еще раз прочитайте мой ответ выше, я говорю про единый DomainContext для всего приложения, а не про DomainDataSource. пока вы этого не реализуете, вы будете получать ошибку авторEntity 'FamilyStatus : 1' cannot be attached to this EntityContainer because it is already attached to another EntityContainer. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 17:21 |
|
Не обновляется DomainDataSource.Data при удалении записи
|
|||
---|---|---|---|
#18+
уТКа, извините, в моём прошлом сообщении опечатка: реализован не один DomainDataSource, а единый DomainContext в статических ресурсах приложения. Но связанные данные всё равно не подтягиваются, и описанная выше ошибка не исчезает. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 17:33 |
|
Не обновляется DomainDataSource.Data при удалении записи
|
|||
---|---|---|---|
#18+
Balda_1, Подскажите, пожалуйста, что я делаю не правильно: 1. Создаю в статических ресурсах единый DomainContext Код: plaintext 1.
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Код: 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.
В результате отображается пустой грид и пустая DataForm (( ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 18:07 |
|
Не обновляется DomainDataSource.Data при удалении записи
|
|||
---|---|---|---|
#18+
Balda_1, во вашему коду не видно, что вы используете единый DomainContext автор<riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my:PersonalInfo, CreateList=true}" Height="0" LoadedData="personalInfoDomainDataSource_LoadedData" Name="personalInfoDomainDataSource" QueryName="GetPersonalInfoesQuery" Width="0"> <riaControls:DomainDataSource.DomainContext> <my1:EmployeesDomainContext /> </riaControls:DomainDataSource.DomainContext> </riaControls:DomainDataSource> ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 18:07 |
|
Не обновляется DomainDataSource.Data при удалении записи
|
|||
---|---|---|---|
#18+
Balda_1, если честно, вы используете самый геморный вариант для подгрузки связанных данный в ComboBox-ы, вот тынц , читаем и делаем. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 18:15 |
|
Не обновляется DomainDataSource.Data при удалении записи
|
|||
---|---|---|---|
#18+
уТКа, да выбранный мной вариант геморный, но при этом не нужно вручную задавать шаблоны отображения для DataForm в разных режимах работы. Хотя, использование ExtendedComboBox по-своему удобно ) Проблема осталась все та же: не заполняется единый DomainContext (даже при использовании ExtendedComboBox). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 18:30 |
|
Не обновляется DomainDataSource.Data при удалении записи
|
|||
---|---|---|---|
#18+
заполняется если указывать DataContext для DomainDataSource через стили. ) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 18:43 |
|
Не обновляется DomainDataSource.Data при удалении записи
|
|||
---|---|---|---|
#18+
С использованием единого DomainContext и ExtendedComboBox остается та же проблема при удалении только что созданной записи: The specified entity is not contained in this EntitySet. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 19:07 |
|
Не обновляется DomainDataSource.Data при удалении записи
|
|||
---|---|---|---|
#18+
Balda_1, ну тогда не знаю чем вам помочь, ошибка явно говорит, что записи находятся в разных DomainContext. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2011, 21:17 |
|
Не обновляется DomainDataSource.Data при удалении записи
|
|||
---|---|---|---|
#18+
Вот такой код работает, т.е. строка удаляется из базы: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Но при этом удаленная строка продолжает отображатся в гриде... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2011, 12:15 |
|
Не обновляется DomainDataSource.Data при удалении записи
|
|||
---|---|---|---|
#18+
GetNewBindingList вам в помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2011, 19:31 |
|
Не обновляется DomainDataSource.Data при удалении записи
|
|||
---|---|---|---|
#18+
DataContext содержит строки, умеющие сообщять от том, что они изменились (изменение свойств). а вот изменение состава списков DataContext не поддерживает, т.к. это модель ДАННЫХ. Посмотрите MVVM еще. Оттуда ноги то растут... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2011, 19:36 |
|
|
start [/forum/topic.php?fid=21&msg=37317933&tid=1442261]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 293ms |
total: | 423ms |
0 / 0 |