什么是防止MVC EF应用程序中重叠事件的最佳方法?

时间:2012-03-05 11:16:07

标签: asp.net-mvc asp.net-mvc-3 entity-framework domain-driven-design

我有一个使用EF Database First的MVC3应用程序。该应用程序记录与汽车相关的各种事件。事件不允许重叠。基于ViewModel从一组标准CRUD屏幕创建和添加事件。然后通过只通过事件存储库插入它们的服务将它们添加到上下文中。

人们正在为汽车创造租用期。因此,我需要防止汽车有重叠的租期,因为只有一个人可以一次租车。

验证无法创建重叠事件的最佳方法是什么?放这个逻辑的最佳位置在哪里。我假设在域层中,因此可以重用核心逻辑。这是属于存储库还是应该在实体本身上实现?它是一个多用户系统,因此我需要阻止两个人同时添加事件,从而导致重叠问题。

任何建议表示赞赏。

由于

格雷姆

1 个答案:

答案 0 :(得分:2)

好的,我认为数据库中的基本唯一约束就足够了。如果发生2个用户预订同一辆车,则数据库应拒绝该交易,因为它将违反约束。我认为密钥可以放在Booked列或smth上。

数据库将检测到异常,存储库应该捕获它并最终引发域事件OverlappedBookingEvent,该事件可能会因用户的错误消息而处理“我们很抱歉,但同时有人预订了该车”。

虽然这是一个业务规则,但我认为这个检查最多只能在存储库级别进行,因为它是一个与持久性相关的规则,最终只有数据库可以强制执行它。