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

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

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

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

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

任何建议表示赞赏。

谢谢

格雷姆

最佳答案

好的,我认为数据库中基本的唯一约束就足够了。如果碰巧有 2 个用户预订同一辆车,那么数据库应该拒绝该事务,因为这将违反约束。我认为 key 可以放在 Booked 列或其他东西上。

数据库会抛出异常,存储库应该捕获它并最终引发域事件 OverlappedBookingEvent ,该事件可能会通过向用户显示错误消息“我们很抱歉,但同时有人预订了那辆车”来处理'.

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

关于asp.net-mvc - 防止 MVC EF 应用程序中事件重叠的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9565690/

相关文章:

c# - 处理谷歌地图的纬度/经度坐标

asp.net-mvc - 如何在 asp.net core mvc 中配置确认电子邮件 token 的生命周期

c# - 将 Autofac.Mvc5 从 3.3.2 更新到 3.3.3 后出错

c# - 使用 Entity Framework 添加具有读/写操作和 View 的 Controller - "Data Context class"是什么?

visual-studio-2010 - 将 HTML5 标记添加到 MVC3 站点

java - 外键注释上同一实体的 Hibernate OneToOne 关系

c# - 无法使 ActionLink 或 RouteLink 生成正确的 URL

asp.net - 如何使用 asp.net mvc 删除 jqgrid 中的多个寄存器?

javascript - jquery中检查复选框是否被选中

asp.net-mvc - 将sql查询数据从Model返回到controller