我有一个使用EF Database First的MVC3应用程序。该应用程序记录与汽车相关的各种事件。事件不允许重叠。基于ViewModel从一组标准CRUD屏幕创建和添加事件。然后通过只通过事件存储库插入它们的服务将它们添加到上下文中。
人们正在为汽车创造租用期。因此,我需要防止汽车有重叠的租期,因为只有一个人可以一次租车。
验证无法创建重叠事件的最佳方法是什么?放这个逻辑的最佳位置在哪里。我假设在域层中,因此可以重用核心逻辑。这是属于存储库还是应该在实体本身上实现?它是一个多用户系统,因此我需要阻止两个人同时添加事件,从而导致重叠问题。
任何建议表示赞赏。
由于
格雷姆
答案 0 :(得分:2)
好的,我认为数据库中的基本唯一约束就足够了。如果发生2个用户预订同一辆车,则数据库应拒绝该交易,因为它将违反约束。我认为密钥可以放在Booked列或smth上。
数据库将检测到异常,存储库应该捕获它并最终引发域事件OverlappedBookingEvent,该事件可能会因用户的错误消息而处理“我们很抱歉,但同时有人预订了该车”。
虽然这是一个业务规则,但我认为这个检查最多只能在存储库级别进行,因为它是一个与持久性相关的规则,最终只有数据库可以强制执行它。