给定像Person这样的简单类,具有FirstName,LastName和DOB属性以及Id属性(这是主键)。
当我调用我的创建操作时,我想执行验证以确定我传入的模型是否与FirstName,LastName和DOB属性碰巧匹配任何已存在的记录。在这种情况下,我想排除Id属性,因为进入应用程序的模型还没有,并会产生误报。
目前我只是使用Any扩展方法......
if (!context.People.Any(x => x.FirstName == model.FirstName && x.LastName ==
model.LastName && x.DOB == model.DOB))
这当然有效,但完全,好,不优雅。
当然有更好的方法吗?
答案 0 :(得分:1)
如果唯一性是业务需求,那么您应该在具有唯一约束的数据库中处理此问题。然后,您不需要检查,数据库将抛出异常并告诉您何时违反。您处理异常并告诉用户他们已经在系统中。
答案 1 :(得分:0)
问题是你不想直接在控制器中看到Any呼叫,或者你根本不喜欢这个呼叫?
如果是前者,则使用验证框架隐藏控制器的详细信息。如果是后者,那么您可以在数据库中创建某种存储过程/函数并调用它。
但是,我并不认为这段代码很糟糕。我只是认为它需要进行验证。 FluentValidation对此非常好,但DataAnnotations也可以正常工作。