Каков наилучший способ предотвращения перекрывающихся событий в приложении MVC EF? - PullRequest
2 голосов
/ 05 марта 2012

У меня есть приложение MVC3, использующее EF Database First.Приложение записывает различные события, связанные с автомобилем.События не могут пересекаться.События создаются и добавляются из стандартного набора экранов CRUD на основе ViewModels.Затем они добавляются в контекст через службу, которая просто вставляет их через репозиторий событий.

Люди создают периоды проката для автомобиля.Поэтому я должен предотвратить одновременный прокат автомобилей, поскольку только один человек может нанять автомобиль за один раз.

Каков наилучший способ проверки того, что нельзя создавать события, которые перекрываются?Где лучшее место, чтобы поставить эту логику.Я предполагаю, что на уровне домена, чтобы основная логика могла быть повторно использована.Это относится к хранилищу или это должно быть реализовано на самом объекте?Это многопользовательская система, поэтому мне нужно, чтобы два человека не добавляли события одновременно, вызывая проблемы с перекрытием.

Любой совет приветствуется.

Спасибо

Грэм

1 Ответ

2 голосов
/ 05 марта 2012

ОК, я думаю, что для этого достаточно базового уникального ограничения в базе данных. Если случается, что 2 пользователя бронируют одну и ту же машину, то база данных должна отказаться от транзакции, поскольку это нарушит ограничение. Я думаю, что ключ может быть помещен в забронированный столбец или что-то в этом роде.

БД выдаст исключение, репозиторий должен перехватить его и, в конце концов, вызвать событие домена OverlappedBookingEvent, которое, вероятно, будет обработано с сообщением об ошибке для пользователя: .

Несмотря на то, что это бизнес-правило, я думаю, что эта проверка должна выполняться не более чем на уровне хранилища, поскольку это правило, связанное с постоянством, и в конечном итоге его может применять только база данных.

...