|
c# ef asnotracking и combobox
|
|||
---|---|---|---|
#18+
Здравствуйте! Не знаю как правильно настроить работу Combobox (SeletedItem), при использовании в запросу EF метод AsNoTracking(). Проблема в том, что combobox при открытии формы отображается без выбранной позиции. Без использования AsNoTracking(), проблем нет, выбранная позиция отображается при загрузке формы. Для чего нужен метод AsNoTracking(), я знаю! Код: xml 1.
Помогите пожалуйста, кто знает в чем причина? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2018, 07:24 |
|
c# ef asnotracking и combobox
|
|||
---|---|---|---|
#18+
Nechto, 1) Проверить установлено ли свойство ItemBook при инициализации ViewModel. 2)Если установлено, но все равно не отображается, то вызвать notifyPropertyChange("ItemBook") после установки свойства. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2018, 08:53 |
|
c# ef asnotracking и combobox
|
|||
---|---|---|---|
#18+
vb_subNechto, 1) Проверить установлено ли свойство ItemBook при инициализации ViewModel. 2)Если установлено, но все равно не отображается, то вызвать notifyPropertyChange("ItemBook") после установки свойства. Это я все проверил. Вот пример: Код: 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.
Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2018, 14:25 |
|
c# ef asnotracking и combobox
|
|||
---|---|---|---|
#18+
Потому что в случае AsNoTracking() Union который ты получил, и Union, который в словаре - это два разных объекта, один отслеживаемый, другой нет. Реализуй компаратор на объекте Union ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2018, 15:36 |
|
c# ef asnotracking и combobox
|
|||
---|---|---|---|
#18+
Поправлюсь: все то же самое, только про DictType Shocker.ProПотому что в случае AsNoTracking() DictType который ты получил, и DictType , который в словаре - это два разных объекта, один отслеживаемый, другой нет. Реализуй компаратор на объекте DictType ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2018, 15:39 |
|
c# ef asnotracking и combobox
|
|||
---|---|---|---|
#18+
Еще поправлюсь, не компаратор конечно же, а сравнение эквивалентности ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2018, 15:46 |
|
c# ef asnotracking и combobox
|
|||
---|---|---|---|
#18+
Shocker.Pro. Первое сделал это так. Проверил. Все ровно в combobox не выбрана позиция. Код: c# 1. 2.
Наверное я вас не понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2018, 07:16 |
|
c# ef asnotracking и combobox
|
|||
---|---|---|---|
#18+
Создал конверт и повесил его на свойство SeletedItem - значение DictType приходит. Как заставить его отображаться в combobox??? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2018, 10:26 |
|
c# ef asnotracking и combobox
|
|||
---|---|---|---|
#18+
Сейчас это все равно два разных объекта. Когда включено отслеживание, то когда ты пытаешься повторно получить объект из контекста, тебе будет выдаваться один и тот же объект именно потому, что есть Tracking Когда ты отключаешь трекинг, контекст тебе отдает каждый раз новый объект. Именно потому, что он не отслеживает те объекты, которые отдал тебе ранее. И в этом коде Union.DictType и элемент DictType из массива DictType (блин, ну кто так называет переменные, если это у тебя массив, значит DictTypes надо назвать) - это разные экземпляры, они не равны при сравнении по ссылке. Чтобы они все-таки были равны, тебе нужно реализовать сравнение эквивалентности (по Id будет вполне достаточно), либо использовать в качестве SelectedObject объект взятый именно из коллекции DictType ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2018, 10:31 |
|
c# ef asnotracking и combobox
|
|||
---|---|---|---|
#18+
Как же в этом wpf все намешано то, IMHO. Кэш, VIEW и код банального комобокса. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2018, 10:43 |
|
c# ef asnotracking и combobox
|
|||
---|---|---|---|
#18+
Причем тут wpf вообще? С этим же успехом ты можешь и винформах на эти же грабли наступить. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2018, 10:44 |
|
c# ef asnotracking и combobox
|
|||
---|---|---|---|
#18+
Shocker.ProСейчас это все равно два разных объекта. Когда включено отслеживание, то когда ты пытаешься повторно получить объект из контекста, тебе будет выдаваться один и тот же объект именно потому, что есть Tracking Когда ты отключаешь трекинг, контекст тебе отдает каждый раз новый объект. Именно потому, что он не отслеживает те объекты, которые отдал тебе ранее. И в этом коде Union.DictType и элемент DictType из массива DictType (блин, ну кто так называет переменные, если это у тебя массив, значит DictTypes надо назвать) - это разные экземпляры, они не равны при сравнении по ссылке. Чтобы они все-таки были равны, тебе нужно реализовать сравнение эквивалентности (по Id будет вполне достаточно), либо использовать в качестве SelectedObject объект взятый именно из коллекции DictType Получилось используя свойство SelectedValue (Union.DictTypeId), вместо SelectedItem и добавив свойство SelectedValuePath. А как делается сопоставление эквивалентности (по Id будет вполне достаточно) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2018, 10:47 |
|
c# ef asnotracking и combobox
|
|||
---|---|---|---|
#18+
Либо так: вместо: Union = db.Set<Union>().AsNoTracking().FirstOrDefault(w => w.DictTypeId != null); тупо как-то так: var id = db.Set<Union>().AsNoTracking().FirstOrDefault(w => w.DictTypeId != null)?.DictTypeId Union = DictType.FirstOrDefault(n => n.Id == id); ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2018, 10:50 |
|
c# ef asnotracking и combobox
|
|||
---|---|---|---|
#18+
NechtoА как делается сопоставление эквивалентности (по Id будет вполне достаточно) ну блин, это ж основы, читай букварь https://blog.rc21net.ru/csharp-sravnenie-obektov/ ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2018, 10:52 |
|
c# ef asnotracking и combobox
|
|||
---|---|---|---|
#18+
Petro123, EntityFramework не имеет никакого отношения к WPF ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2018, 10:52 |
|
|
start [/forum/topic.php?fid=21&fpage=6&tid=1440448]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
72ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 258ms |
total: | 423ms |
0 / 0 |