这个问题可能已被提出,抱歉
我正在研究用于验证模型的架构。我们可以通过使用属性验证属性(某些自定义)和使用
来实现简单验证ModelState.IsValid
然而问题是验证需要访问数据库或访问另一个属性。一个完美的例子是检查重复的名称。在这种情况下,我们需要检查数据库中重复的名称,其中id不等于当前对象的id(用于更新)
如果我们将此作为要应用于name属性的验证属性来编写,则会导致问题。 Ome我们如何访问数据库,以及我们如何访问id属性。
总之。是否有任何良好的方法来构建解决此问题的方法?
答案 0 :(得分:0)
今天我花了一些时间探索这个正在研究的项目并得出了这些结论。
解决方法并不坏,其中大部分涉及一些反射并使用验证上下文来检查和访问模型的其他属性或使用IValidationObject。真正的问题是可以进行需要数据库交互的验证。
对于一个我关心性能的人,在一个特定的情况下,验证做了一个返回一个对象的查询,以确保它存在,我后来需要进行关系分配,这将导致另一个查询。
其次,您需要考虑数据库并发性。执行重复检查的最佳方法是在插入之前,因为数据库可以在两个操作之间进行更改。这也与第一个原因有关,一个对象可以在数据库报告存在后立即删除。
在我的特定项目中,我觉得最好通过修改我的EF上下文并添加任何错误的ModelState来保持这种行为。