Это не вопрос количества уровней.Вопрос в том, как ваша логика доступа к данным справляется с параллелизмом.Работа с параллелизмом должна происходить в зависимости от того, какой уровень обрабатывает ваш доступ к данным, независимо от того, сколько уровней у вас есть.Но я понимаю, откуда вы, поскольку элементы управления .NET и компоненты могут скрыть эту функциональность и уменьшить количество необходимых уровней.
Существует два распространенных метода оптимистического разрешения параллелизма.
Первый использует временную метку в строках, чтобы определить, была ли изменена версия, которую просматривал пользователь, когда они начали редактирование.время, когда они совершают свои правки.Имейте в виду, что это не обязательно правильный тип данных базы данных Timestamp.Различные системы будут использовать разные типы данных, каждый из которых имеет свои преимущества и недостатки.Это более простой подход, который отлично работает с большинством хорошо спроектированных баз данных.
Второй общий подход заключается в том, чтобы при фиксации изменений идентифицировать рассматриваемую строку не только по id, но и по всем исходным значениям для полей.что пользователь изменил.Если исходные значения полей и идентификатора не совпадают в редактируемой записи, вы знаете, что хотя бы одно из этих полей было изменено другим пользователем.Этот параметр имеет то преимущество, что даже если два пользователя редактируют одну и ту же запись, если они не изменяют одни и те же поля, фиксация работает.Недостатком является то, что возможна дополнительная работа, чтобы гарантировать, что данные в записи базы данных находятся в согласованном состоянии с точки зрения бизнес-правил.
Вот достойное объяснение того, какреализовать простой оптимистичный параллелизм в EF.