我有一个使用 EF Database First 的 MVC3 应用程序。该应用程序记录与汽车相关的各种事件。事件不允许重叠。事件是从基于 ViewModel 的一组标准 CRUD 屏幕创建和添加的。然后,它们通过服务添加到上下文中,该服务仅通过事件存储库插入它们。
人们正在为汽车创建租赁期。因此,我需要防止汽车具有重叠的租赁期,因为一次只有一个人可以租一辆车。
验证不能创建重叠事件的最佳方法是什么?这个逻辑最好放在哪里。我假设在领域层,所以核心逻辑可以被重用。这是属于存储库还是应该在实体本身上实现?这是一个多用户系统,因此我需要防止两个人同时添加事件导致重叠问题。
任何建议表示赞赏。
谢谢
格雷姆
最佳答案
好的,我认为数据库中基本的唯一约束就足够了。如果碰巧有 2 个用户预订同一辆车,那么数据库应该拒绝该事务,因为这将违反约束。我认为 key 可以放在 Booked 列或其他东西上。
数据库会抛出异常,存储库应该捕获它并最终引发域事件 OverlappedBookingEvent ,该事件可能会通过向用户显示错误消息“我们很抱歉,但同时有人预订了那辆车”来处理'.
虽然这是一个业务规则,但我认为这种检查最多只能在存储库级别进行,因为这是一个与持久性相关的规则,最终只有数据库可以强制执行它。
关于asp.net-mvc - 防止 MVC EF 应用程序中事件重叠的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9565690/