如何首先使用EF代码防止逻辑重复?

时间:2011-11-11 17:09:39

标签: c# asp.net-mvc ef-code-first

给定像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))

这当然有效,但完全,好,不优雅。

当然有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

如果唯一性是业务需求,那么您应该在具有唯一约束的数据库中处理此问题。然后,您不需要检查,数据库将抛出异常并告诉您何时违反。您处理异常并告诉用户他们已经在系统中。

答案 1 :(得分:0)

问题是你不想直接在控制器中看到Any呼叫,或者你根本不喜欢这个呼叫?

如果是前者,则使用验证框架隐藏控制器的详细信息。如果是后者,那么您可以在数据库中创建某种存储过程/函数并调用它。

但是,我并不认为这段代码很糟糕。我只是认为它需要进行验证。 FluentValidation对此非常好,但DataAnnotations也可以正常工作。

相关问题