powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / c# параллелизм в EntityFramework
25 сообщений из 103, страница 1 из 5
c# параллелизм в EntityFramework
    #39351602
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

У меня возникла проблема в моем приложении, связанна она с одновременным доступом нескольких пользователей на редактирование одной и той же записи в таблице. Почитав мануалы, я вычитал, что в EntityFrameWork по умолчанию нет ограничений на одновременное редактирование одной записи несколькими пользователями.

Что я нашел для решения этого вопроса:
1. Аннотация [ConcurrencyCheck] на определенное поле
2. Аннотация
[Timestamp]
public byte[] RowVersion { get; set; } это на строку в целом.


Решение как оказывается есть, но оно не решает задачу полностью. Так как это работает только тогда, когда пользователь захочет сохранить данные. А за это время другой пользователь может открыть туже самую запись, и изменить поля, а при сохранении у вылетит ошибка о том что эту строку уже кто-то вперед его сохранил. Соответственно, все что второй пользователь вносил было напрасно.

Как реализовать так, чтобы второй пользователь изначально видел, что строка уже редактируется первым пользователем до её сохранения в базу данных первым пользователем?
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39351616
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На мой взгляд, решение нужно не на уровне EF, а выше - на уровне программной логики. То есть вести пул, кто какие записи открывает на редактирование (необязательно в конкретной таблице, возможно общий подход на всё приложение). Тогда никто не помешает другим пользователям просматривать эту запись в режиме "только для чтения", что часто важно в многопользовательском приложении. Проверка и блокировка происходит только тогда, когда пользователь пытается перейти в режим редактирования.
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39351623
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProНа мой взгляд, решение нужно не на уровне EF, а выше - на уровне программной логики. То есть вести пул, кто какие записи открывает на редактирование (необязательно в конкретной таблице, возможно общий подход на всё приложение). Тогда никто не помешает другим пользователям просматривать эту запись в режиме "только для чтения", что часто важно в многопользовательском приложении. Проверка и блокировка происходит только тогда, когда пользователь пытается перейти в режим редактирования.

На уровне логики приложения, это велосипед придется лепить причем с кучей исключений. Так как у меня wpf с реализацией постраничной. Пользователь может гулять по взаимосвязанным формам редактирования.
Я то думал что можно использовать какой-то стандартный набор инструментов для реализации этой задачи.
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39351630
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитай про оптимистическую блокировку .
Может найдешь подход разрешения конфликтов, который тебя устроит.
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39351797
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стандартного набора нет, т.к. сама задача нестандартна. Как выше писали, это бизнесовый кейс и отрабатывать его придётся велосипедом.
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39351815
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TПочитай про оптимистическую блокировку .
Может найдешь подход разрешения конфликтов, который тебя устроит.

http://professorweb.ru/my/LINQ/linq_sql/level13/13_1.php
Читаю пока это, возможно это тоже подойдет.
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39351988
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СмузиСтандартного набора нет, т.к. сама задача нестандартна. Как выше писали, это бизнесовый кейс и отрабатывать его придётся велосипедом.
хехе
это всегда была стандартно задачей
то что кто то сделал стандартом оптимистическую блокировку не означает что пессимизм уже никому не нужен
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352022
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NechtoКак реализовать так, чтобы второй пользователь изначально видел, что строка уже редактируется первым пользователем до её сохранения в базу данных первым пользователем?

Каким-то образом определять, что запись была изменена на моменте сохранения и решать что с этим делать: перезаписать, предупредить пользователя о перезаписи или что-то ещё. Смотря что тебе нужно.

Определять изменение можно по времени изменения, или по штампу изменений, или по истории изменений. Миллион вариантов. Процесс обновления локать, но аккуратно.
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352052
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosэто всегда была стандартно задачей
Так там кейсов море "что делать, если"... В стандарты никак не лезет.
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352074
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смузи,

До
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352075
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

после
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352201
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos, блокировать всю запись - плохо. Нужно блокировать только поля, а это уже бизнесовая фича.
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352226
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СмузиViPRos, блокировать всю запись - плохо. Нужно блокировать только поля, а это уже бизнесовая фича.
Ты знаешь как это устроено? Или исходишь от "запись заблокирована"?
Будут блокированы некоторые поля (запись примитивного типа), если тип композитный :)
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352227
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

Никакая эта не бизнес фича, а архитектурный паттерн - Разделяй и властвуй!
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352231
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В MSSQL есть блокировки уровня приложения sp_getapplock , но они привязаны к соединению, а оно постоянно меняется.
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352244
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosНикакая эта не бизнес фича, а архитектурный паттерн - Разделяй и властвуй!
Не понимаю, какой еще паттерн. БД не может эскалировать column level блокировки, в движке ADO.NET тоже нет такого, ORM тоже такое не поддерживают (есть некоторые вещи, но этого мало).
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352246
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СмузиViPRosНикакая эта не бизнес фича, а архитектурный паттерн - Разделяй и властвуй!
Не понимаю, какой еще паттерн. БД не может эскалировать column level блокировки, в движке ADO.NET тоже нет такого, ORM тоже такое не поддерживают (есть некоторые вещи, но этого мало).
Ну я то в этом не виноват :)
Блокировать можно и нужно (это очень частое требование, особенно у тех, у кого (по их мнению) много секретов (которые интересны только им самим воще то))
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352251
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosБлокировать можно и нужно
Так я ж не против. Вопрос в том, как это делать.
1. Пользователь начал редактировать конкретное поле записи, взвели таймстэмп в связке с identity.
2. Save => таймстэмп обнулили.
3. Пока таймстэмп не обнулен, другим пользователям не доступно поле для редактирования.
4. Плюс заложили дельту времени на простой с автообнулением таймстэмпа.
Вот тебе и вся архитектура :)
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352255
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СмузиViPRosБлокировать можно и нужно
Так я ж не против. Вопрос в том, как это делать.
1. Пользователь начал редактировать конкретное поле записи, взвели таймстэмп в связке с identity.
2. Save => таймстэмп обнулили.
3. Пока таймстэмп не обнулен, другим пользователям не доступно поле для редактирования.
4. Плюс заложили дельту времени на простой с автообнулением таймстэмпа.
Вот тебе и вся архитектура :)
Надо рассчитывать на то что с БД работают и другие приложения и им пофиг твои соглашения.
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352275
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosНадо рассчитывать на то что с БД работают и другие приложения и им пофиг твои соглашения.
Не вижу противоречий.
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352290
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СмузиViPRosНадо рассчитывать на то что с БД работают и другие приложения и им пофиг твои соглашения.
Не вижу противоречий.
что то не въехал, старею что ль :(

как твоя конструкция мешает мне сделать
Код: sql
1.
update type set pole = фигня какая та where identity = нужная фигня ?
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352295
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos, а твоя защищает от админского DROP DATABASE? Не понимаю проблемы. Если ты в обход логики что-то на стороне апдейтишь, какой смысл уповать на ту самую логику.
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352297
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СмузиViPRos, а твоя защищает от админского DROP DATABASE? Не понимаю проблемы. Если ты в обход логики что-то на стороне апдейтишь, какой смысл уповать на ту самую логику.
1. Ну я ж сказал, что с БД могут работать разные приложения и они чихали на твои внутриприложенческие соглашения об этичности некоторых действий.

2. Защищает.
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352310
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos1. Ну я ж сказал, что с БД могут работать разные приложения и они чихали на твои внутриприложенческие соглашения об этичности некоторых действий.
2. Защищает.
Я ж намекнул, что все приложения должны ходить в БД через единое API. Если это не так, то грошь цена твоей песочнице.
...
Рейтинг: 0 / 0
c# параллелизм в EntityFramework
    #39352314
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СмузиViPRos1. Ну я ж сказал, что с БД могут работать разные приложения и они чихали на твои внутриприложенческие соглашения об этичности некоторых действий.
2. Защищает.
Я ж намекнул, что все приложения должны ходить в БД через единое API. Если это не так, то грошь цена твоей песочнице.
Мусь, не начинай.
Никто не будет переписывать свои зоопарк из какого-то сраного ОРМ, который не умеет работать с пессимизме и требует - О УЖОС!!! -
какие то ДТО (что за зверь, с чем едят, какой недоумок придумал?)
...
Рейтинг: 0 / 0
25 сообщений из 103, страница 1 из 5
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / c# параллелизм в EntityFramework
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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