Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
06.08.2012, 18:52
|
|||
---|---|---|---|
|
|||
Как всё-таки правильно работать с DbContext (EF CF)? |
|||
#18+
Раньше делал аппликации, которые работали на мобильных устройствах, ну в крайнем случае - обладали монопольным доступом к базе. Поэтому создавал один раз SqlConnection\DbContext и уже не уничтожал их до самого конца. И как-то всё было без печали. Теперь решил всё сделать "по уму". Работаю с DbContext-ом используя using. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Да, считываются все объекты в память - я знаю. Сразу после выполнения запроса - все мои POCO-сущности начинают болтаться как г-но в проруби. Жаль, но правда. Ну так вот, изменил я пару сущностей и настало время записать их обратно в базу. Вот она: Код: 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.
Проблема в общем в mapObjectTypes . Их в таблице должно быть всего два. Присваиваются в коде. Но при сохранении нового MapObject - EF пытается создать третью запись, и вылетает конечно с ошибкой. Потому как объекта там вообще может быть только два. Отсюда вопрос - как надо вообще сохранять новые объекты? 1. Объект создается. 2. Инициализирует свои поля (пускай даже сущностями из DbContext) 3. DbContext - делает dispose 4. Объекты остаются "сами по себе". Работают, используя свои данные. 5. Пришло время сохранить объект. 6. У меня получилось только так: 6.1 Пытаемся читать объект в DbContext. 6.2 Если есть - делаем update полей. 6.3 Если нету - делаем... Что делаем? Заново инициализируем объект всеми его полями? Старый DbContext-то уже умер. Но это же бред. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.08.2012, 18:55
|
|||
---|---|---|---|
Как всё-таки правильно работать с DbContext (EF CF)? |
|||
#18+
Monochromatique, мне кажется тут самый верный способ такой: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.08.2012, 19:23
|
|||
---|---|---|---|
|
|||
Как всё-таки правильно работать с DbContext (EF CF)? |
|||
#18+
netivan, так это ж по сути тоже самое. Если в сохраняемом объекте есть поле со ссылкой не объект, которого НЕТ в DbContext, то EF попытается его ДОБАВИТЬ. Искать она его не будет. Слишком имхо низкоуровневая она какая-то. Всё вручную надо делать. Если типа объект новый (ADD), то и все его поля тоже новые? Смешно и грустно. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.08.2012, 09:36
|
|||
---|---|---|---|
Как всё-таки правильно работать с DbContext (EF CF)? |
|||
#18+
Monochromatique, не совсем понял вопрос тогда. А если так? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.08.2012, 10:12
|
|||
---|---|---|---|
|
|||
Как всё-таки правильно работать с DbContext (EF CF)? |
|||
#18+
netivan, Ага, и вся штука в том, что если у entity есть ссылки на другие объекты - то их тоже надо добавлять в TObjectContext(). Даже если они были извлечены когда-то оттуда (но другого экземпляра.) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=17&tablet=1&tid=1350274]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
others: | 299ms |
total: | 394ms |
0 / 0 |