需要数据库访问的代码第一次验证(重复瓦尔)
问题描述:
可能已经提出了此问题,对不起需要数据库访问的代码第一次验证(重复瓦尔)
我正在查看验证我们模型的体系结构。我们简单的验证可以通过使用属性验证属性(一些自定义),并使用
ModelState.IsValid
但问题是,当验证需要访问数据库或访问其他属性来实现。一个完美的例子是检查重复的名字。在这种情况下,我们需要检查数据库中的重复名称,其中id与当前对象的id不相同(用于更新)
如果我们将此作为验证属性写入name属性,会导致问题。 Ome我们如何访问数据库,以及两个如何访问ID属性。
所以在最后。有什么好的方法来解决这个问题的例子吗?
答
我今天这个花了一些时间来研究一个项目我工作,来到了这些结论。
这是不坏解决怎么样,大部分是涉及到一些反思和使用验证的上下文检查和访问模型或使用IValidationObject的其他属性。真正的问题是可以做需要数据库交互的验证。
对于一个我很关心性能,在一个特定的情况下验证作出返回的对象,以确保它的存在,我以后需要的关系分配,然后这将导致另一个查询的查询。
其次,你需要考虑数据库并发。执行重复检查的最佳方式是在插入之前,因为数据库可能会在两个操作之间进行更改。这也与第一个原因有关,一个对象可能在数据库报告它存在后立即被删除。
在我的特别项目,我觉得它更好地保持这种行为与修改我的EF上下文和添加任何走错到ModelState中。