|
Entity Framework + Optimistic Concurrency Exception
|
|||
---|---|---|---|
#18+
День добрый. Использую в проекте MVC3 + EF. Проект уже установлен на IIS. И при удалении/редактировании вылезает Optimistic Concurrency Exception. Причем, никаких других обращений к приложению то и нет. В дальнейшем их тоже не будет (все удаления/апдейты будут производиться только собственно на сервере. А другие пользователи будут обращаться к серверу только на чтение) В общем, как и где настроить EF так, чтобы запись проводилась всегда поверх, чтобы никакой этой конкуренции и не было? Так как при такой задаче писать обработку исключения, обновлять StateManager и т.п. это кажется лишним... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 13:49 |
|
Entity Framework + Optimistic Concurrency Exception
|
|||
---|---|---|---|
#18+
Sky DragonДень добрый. Использую в проекте MVC3 + EF. Проект уже установлен на IIS. И при удалении/редактировании вылезает Optimistic Concurrency Exception. Причем, никаких других обращений к приложению то и нет. В дальнейшем их тоже не будет (все удаления/апдейты будут производиться только собственно на сервере. А другие пользователи будут обращаться к серверу только на чтение) В общем, как и где настроить EF так, чтобы запись проводилась всегда поверх, чтобы никакой этой конкуренции и не было? Так как при такой задаче писать обработку исключения, обновлять StateManager и т.п. это кажется лишним... В дизайнере EF у свойств сущностей в проперти гриде поотключай. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 14:19 |
|
Entity Framework + Optimistic Concurrency Exception
|
|||
---|---|---|---|
#18+
Lord British, А ставить в None или Fixed? И блин... это надо для каждого свойства? Это ж убиться можно ... ) И когда то давно пробовал такой способ, вроде не помогло. Попробую еще раз ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 14:40 |
|
Entity Framework + Optimistic Concurrency Exception
|
|||
---|---|---|---|
#18+
показывает на каких полях стоит concurency Код: sql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 15:35 |
|
Entity Framework + Optimistic Concurrency Exception
|
|||
---|---|---|---|
#18+
Lord British, Во всех полях по умолчанию стоит режим None. И если я правильно прочитал, то Fixed - это как раз установка в ConcurrencyMode. А мне наоборот это не надо. И кстати, таким образом мы меняем свойства. А если на удаление всего объекта? (именно при удалении у меня это исключение и выскакивает). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 08:15 |
|
Entity Framework + Optimistic Concurrency Exception
|
|||
---|---|---|---|
#18+
Sky Dragon, Прогони код что я тебе кинул. Он покажет на каких полях стоит Concurency Fixed. Потом руками поменяешь его на None. Что не понятно то? И почему вас смущает, что ексепшн сыпется на удалении? При удаленнии тоже проверяется был ли изменен обьект если есть поля для которых Concurency Chacking включен. Вот так выглядит запрос на удаление, генерируемый по умлочанию. exec sp_executesql N'delete [dbo].[zz] where (([id] = @0) and ([v] = @1))',N'@0 int,@1 binary(8)',@0=1,@1=0x00000000000007D4 У меня V - колонка с версией. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2013, 16:14 |
|
Entity Framework + Optimistic Concurrency Exception
|
|||
---|---|---|---|
#18+
Lord British, Код прогнал. У всех полей Concurency и так None. У EF по умолчанию включен режим оптимистического параллелизма, что и приводит к исключению (вопрос о том, ГДЕ же происходит параллельное изменение данных так и остается загадкой пока...). То есть вариант http://msdn.microsoft.com/ru-ru/library/bb738618.aspx конечно работает... Но придется все SaveChanges менять... А лень) Вот и спрашиваю, может есть иной способ, типа отключить оптимистический параллелизм и просто сохранять изменения подряд. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2013, 07:39 |
|
Entity Framework + Optimistic Concurrency Exception
|
|||
---|---|---|---|
#18+
Sky DragonКод прогнал. У всех полей Concurency и так None. не может быть. Sky DragonУ EF по умолчанию включен режим оптимистического параллелизма Не правда. Какая версия EF? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2013, 11:15 |
|
Entity Framework + Optimistic Concurrency Exception
|
|||
---|---|---|---|
#18+
по вашей ссылке The Entity Framework saves object changes to the database without checking for concurrency . For entities that might experience a high degree of concurrency, we recommend that the entity define a property in the conceptual layer with an attribute of ConcurrencyMode="fixed" , as shown in the following example: When this attribute is used, the Entity Framework checks for changes in the database before saving changes to the database. Any conflicting changes will cause an OptimisticConcurrencyException. да и сам бы уже глянул на простейшем примере какие запросы сыпятся в базу при Fixed и при None. the Entity Framework checks for changes in the database before saving changes to the database я думал дока на индуглише будет лучше. lol же. никаких спец проверок он не делает, просто в предикат запроса добавляет Поле_с_Fixed = OriginalValue и так для каждого у кого есть Fixed. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2013, 11:35 |
|
Entity Framework + Optimistic Concurrency Exception
|
|||
---|---|---|---|
#18+
Lord British, Версия 4.3.1. Все свойства всех сущностей имеют режим параллелизма в None. Такими они генерируются уж.. И из ссылки первая строка ссылкаПо умолчанию в платформе Entity Framework реализуется модель оптимистичного параллелизма. Но из дальнейших слов тогда эксепшена не должно быть, но он есть О_о Lord Britishя думал дока на индуглише будет лучше. lol же. никаких спец проверок он не делает, просто в предикат запроса добавляет Поле_с_Fixed = OriginalValue и так для каждого у кого есть Fixed. А это, извините, мне не понятно в силу моей необразованности )) Простой пример. Перед вызовом SaveChanges() ставим бряк. Меняю любое поле в БД ручками. Потом продолжаем выполнение и вот он OptimisticConcurrencyException... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2013, 08:03 |
|
Entity Framework + Optimistic Concurrency Exception
|
|||
---|---|---|---|
#18+
Sky Dragon, покажи запросы, которые сыпятся в бд (которые генерит EF) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2013, 10:47 |
|
Entity Framework + Optimistic Concurrency Exception
|
|||
---|---|---|---|
#18+
Lord British, Возникает логичный вопрос) Где их взять?) Так, и еще, падает только при удалении: добавил элемент, потом удалил сразу. При апдейте все норм. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2013, 11:50 |
|
Entity Framework + Optimistic Concurrency Exception
|
|||
---|---|---|---|
#18+
Sky Dragon, субд ms sql server? тогда sql server profiler поможет. запустите его, а потом выполните последовательность действий, которая приводит к такому вот поведению, как в топике. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2013, 12:39 |
|
Entity Framework + Optimistic Concurrency Exception
|
|||
---|---|---|---|
#18+
Код: sql 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.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
теперь ясно почему в доке так пишут, что optimistic concurency checking всегда работает. век живи век учись. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2013, 13:06 |
|
Entity Framework + Optimistic Concurrency Exception
|
|||
---|---|---|---|
#18+
Lord British, Да, метеориты падают с неба) не до работы было))) То есть от исключения не уйти... И видимо остается 2 варианта: искать кто-же меняет данные еще и попытаться это исправить, либо везде обрабатывать исключение. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2013, 10:24 |
|
Entity Framework + Optimistic Concurrency Exception
|
|||
---|---|---|---|
#18+
try catch не помог. Пришлось копнуть глубже. И вот что было выкопано: Код: c# 1. 2. 3.
Но в БД поле ChangeTime - только дата(без времени). И после вызова SaveChanges у dbStudent появляется 2 объекта StudentMigration. Один с датой, другой с датой+время. В БД только с датой. Отсюда и исключение после появляется... И тут уже другой вопрос, почему же EF генерит второй объект, а не заменяет первый на объект с укороченной датой. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2013, 10:40 |
|
|
start [/forum/topic.php?fid=17&fpage=28&tid=1350098]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 137ms |
0 / 0 |