powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Entity Framework + Optimistic Concurrency Exception
16 сообщений из 16, страница 1 из 1
Entity Framework + Optimistic Concurrency Exception
    #38145991
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый.

Использую в проекте MVC3 + EF.
Проект уже установлен на IIS.

И при удалении/редактировании вылезает Optimistic Concurrency Exception. Причем, никаких других обращений к приложению то и нет.
В дальнейшем их тоже не будет (все удаления/апдейты будут производиться только собственно на сервере. А другие пользователи будут обращаться к серверу только на чтение)

В общем, как и где настроить EF так, чтобы запись проводилась всегда поверх, чтобы никакой этой конкуренции и не было?
Так как при такой задаче писать обработку исключения, обновлять StateManager и т.п. это кажется лишним...
...
Рейтинг: 0 / 0
Entity Framework + Optimistic Concurrency Exception
    #38146060
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sky DragonДень добрый.

Использую в проекте MVC3 + EF.
Проект уже установлен на IIS.

И при удалении/редактировании вылезает Optimistic Concurrency Exception. Причем, никаких других обращений к приложению то и нет.
В дальнейшем их тоже не будет (все удаления/апдейты будут производиться только собственно на сервере. А другие пользователи будут обращаться к серверу только на чтение)

В общем, как и где настроить EF так, чтобы запись проводилась всегда поверх, чтобы никакой этой конкуренции и не было?
Так как при такой задаче писать обработку исключения, обновлять StateManager и т.п. это кажется лишним...

В дизайнере EF у свойств сущностей в проперти гриде поотключай.
...
Рейтинг: 0 / 0
Entity Framework + Optimistic Concurrency Exception
    #38146127
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lord British,

А ставить в None или Fixed?
И блин... это надо для каждого свойства? Это ж убиться можно ... )

И когда то давно пробовал такой способ, вроде не помогло. Попробую еще раз
...
Рейтинг: 0 / 0
Entity Framework + Optimistic Concurrency Exception
    #38146251
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
показывает на каких полях стоит 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.
using System;
using System.Collections.Generic;
using System.Data.Entity.Infrastructure;
using System.Data.Metadata.Edm;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication22
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var ctx = new DB1Entities())
            {
                var mw = ((IObjectContextAdapter)ctx).ObjectContext.MetadataWorkspace;

                var entities = mw.GetItems<EntityType>(DataSpace.CSpace);

                entities
                    .ToList()
                    .ForEach(e =>
                    {
                        e.Properties
                            .ToList()
                            .ForEach(p =>
                            {
                                if (p.TypeUsage.Facets.Any(f => f.FacetType.Name == "ConcurrencyMode"))
                                    Console.WriteLine("{0} {1}", e.Name, p.Name);
                            });
                    });

            }
        }
    }
}


...
Рейтинг: 0 / 0
Entity Framework + Optimistic Concurrency Exception
    #38147137
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lord British,

Во всех полях по умолчанию стоит режим None.
И если я правильно прочитал, то Fixed - это как раз установка в ConcurrencyMode. А мне наоборот это не надо.

И кстати, таким образом мы меняем свойства. А если на удаление всего объекта? (именно при удалении у меня это исключение и выскакивает).
...
Рейтинг: 0 / 0
Entity Framework + Optimistic Concurrency Exception
    #38148073
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 - колонка с версией.
...
Рейтинг: 0 / 0
Entity Framework + Optimistic Concurrency Exception
    #38148825
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lord British,

Код прогнал. У всех полей Concurency и так None.

У EF по умолчанию включен режим оптимистического параллелизма, что и приводит к исключению (вопрос о том, ГДЕ же происходит параллельное изменение данных так и остается загадкой пока...).
То есть вариант http://msdn.microsoft.com/ru-ru/library/bb738618.aspx конечно работает... Но придется все SaveChanges менять...
А лень) Вот и спрашиваю, может есть иной способ, типа отключить оптимистический параллелизм и просто сохранять изменения подряд.
...
Рейтинг: 0 / 0
Entity Framework + Optimistic Concurrency Exception
    #38149053
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sky DragonКод прогнал. У всех полей Concurency и так None.


не может быть.

Sky DragonУ EF по умолчанию включен режим оптимистического параллелизма


Не правда. Какая версия EF?
...
Рейтинг: 0 / 0
Entity Framework + Optimistic Concurrency Exception
    #38149082
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по вашей ссылке 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.
...
Рейтинг: 0 / 0
Entity Framework + Optimistic Concurrency Exception
    #38150536
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lord British,

Версия 4.3.1. Все свойства всех сущностей имеют режим параллелизма в None. Такими они генерируются уж..
И из ссылки первая строка
ссылкаПо умолчанию в платформе Entity Framework реализуется модель оптимистичного параллелизма.

Но из дальнейших слов тогда эксепшена не должно быть, но он есть О_о


Lord Britishя думал дока на индуглише будет лучше. lol же. никаких спец проверок он не делает, просто в предикат запроса добавляет Поле_с_Fixed = OriginalValue и так для каждого у кого есть Fixed.

А это, извините, мне не понятно в силу моей необразованности ))

Простой пример. Перед вызовом SaveChanges() ставим бряк. Меняю любое поле в БД ручками. Потом продолжаем выполнение и вот он OptimisticConcurrencyException...
...
Рейтинг: 0 / 0
Entity Framework + Optimistic Concurrency Exception
    #38150704
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sky Dragon,

покажи запросы, которые сыпятся в бд (которые генерит EF)
...
Рейтинг: 0 / 0
Entity Framework + Optimistic Concurrency Exception
    #38150837
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lord British,

Возникает логичный вопрос) Где их взять?)

Так, и еще, падает только при удалении: добавил элемент, потом удалил сразу. При апдейте все норм.
...
Рейтинг: 0 / 0
Entity Framework + Optimistic Concurrency Exception
    #38150975
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sky Dragon,

субд ms sql server? тогда sql server profiler поможет. запустите его, а потом выполните последовательность действий, которая приводит к такому вот поведению, как в топике.
...
Рейтинг: 0 / 0
Entity Framework + Optimistic Concurrency Exception
    #38151054
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication29
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var ctx = new DB1Entities())
            {
                var m = ctx.Table_2.First();

                m.DATA = "edqwedq";

                // Если здесь запись, которую мы изхменили, будет удалена сторонним приложением, то вылезет concurency exception в следующей строчке

                ctx.SaveChanges();
            }
        }
    }
}



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// генерит EF
SELECT TOP (1) 
[c].[ID] AS [ID], 
[c].[DATA] AS [DATA]
FROM [dbo].[Table_2] AS [c]

// Удаление из management studio
exec sp_executesql N'DELETE TOP (200) FROM Table_2 WHERE (ID = @Param1) AND (DATA = @Param2)',N'@Param1 int,@Param2 nvarchar(10)',@Param1=2,@Param2=N'WD        '

// сохранение измененной строки которая уже удалена этот запрос вернет 0, EF распознает  это как concurency exception
exec sp_executesql N'update [dbo].[Table_2]
set [DATA] = @0
where ([ID] = @1)
',N'@0 nchar(10),@1 int',@0=N'edqwedq   ',@1=2



теперь ясно почему в доке так пишут, что optimistic concurency checking всегда работает. век живи век учись. :)
...
Рейтинг: 0 / 0
Entity Framework + Optimistic Concurrency Exception
    #38155258
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lord British,

Да, метеориты падают с неба) не до работы было)))

То есть от исключения не уйти... И видимо остается 2 варианта: искать кто-же меняет данные еще и попытаться это исправить, либо везде обрабатывать исключение.
...
Рейтинг: 0 / 0
Entity Framework + Optimistic Concurrency Exception
    #38156918
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
try catch не помог. Пришлось копнуть глубже. И вот что было выкопано:

Код: c#
1.
2.
3.
                dbStudent.StudentMigration.Add(new DataAccessLayer.StudentMigration { ChangeTime = DateTime.Now.AddDays(1), ClassID = dbStudent.ClassID });
                SchoolDbModel.People.AddObject(dbStudent);
                SchoolDbModel.SaveChanges();



Но в БД поле ChangeTime - только дата(без времени).
И после вызова SaveChanges у dbStudent появляется 2 объекта StudentMigration. Один с датой, другой с датой+время. В БД только с датой.
Отсюда и исключение после появляется...

И тут уже другой вопрос, почему же EF генерит второй объект, а не заменяет первый на объект с укороченной датой.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Entity Framework + Optimistic Concurrency Exception
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]