问题描述
|
我与许多人之间有1关系,并且想要检查更新范围内的业务规则。
例如,具有以下情况:
第一个表包含组,第二个表包含学生。还有一条业务规则说:“我们的系统中“一个小组最多可以容纳10名学生”。
我们需要检查更新或事务范围内的规则,因为代码中的预验证不能保证规则的执行。
没有EF中的自定义脚本,是否可以在WHERE条件下进行UPDATE?
在EF中进行这种验证的最佳方法是什么?
解决方法
不,您不能将这样的WHERE条件包括在EF中的UPDATE语句中。此外,这是典型的业务规则验证,在数据库层中几乎没有超出范围。您应该建立一种机制,仅允许单个客户端修改组。客户端将加载一个组(=锁定)以更改学生数并尝试保存该组。由于该组仅由单个客户端锁定,其他任何人都不能修改内容,并且可以在保存组并释放锁定之前自由检查学生数。创建这种锁定机制的最简单方法是添加LockedBy和LockedDate列。为了避免无限锁定,您可以使用某些条件,将比X早的锁定视为已过期。