我如何防止逻辑重复与EF代码

本文关键字:EF 代码 何防止 | 更新日期: 2023-09-27 18:14:07

给定一个简单的类,如Person,具有FirstName, LastName和DOB属性以及Id属性(这是主键)。

当我调用我的create操作时,我想执行一个验证来确定我传入的模型(带有FirstName, LastName和DOB属性)是否恰好与已经存在的任何记录匹配。在这种情况下,我想要排除Id属性,因为进入应用程序的模型还没有Id属性,并且会产生误报。

目前我只是使用Any扩展方法,像这样…

if (!context.People.Any(x => x.FirstName == model.FirstName && x.LastName == 
model.LastName && x.DOB == model.DOB))

这当然可以工作,但完全,嗯,不优雅。

肯定有更好的方法吗?

我如何防止逻辑重复与EF代码

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

问题是你不想直接在控制器中看到Any调用还是你根本不喜欢这个调用?

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

我并不真的认为这段代码不好。我只是觉得这需要得到确认。FluentValidation在这方面非常好,但DataAnnotations也可以工作。