在创建实体之前发现数据库中的冲突的最有效方法是什么?

问题描述 投票:0回答:1

抱歉,如果问题看起来太明显了。

在我的员工管理系统中,我有一个实体,其中包含以下字段:个人电子邮件、公司电子邮件和用户名。我知道我可以将其配置为不接受数据库中的重复项,但如果数据库中存在相同的电子邮件或用户名,我有特定的规则。在创建之前,我需要检查这三个字段是否存在以遵循不同的流程。

执行此查询的最佳方式、最高效的方式是什么?

我正在使用三个查询 AnyAsync(),但是三个查询呢?一定有更好的方法。

编辑:我想要三个布尔值,我需要知道三个字段中哪一个有冲突。

c# .net entity-framework
1个回答
0
投票

我把它作为答案而不是评论,因为评论太多了。

将重复项的发现与布尔结果分开。

鉴于:

var candidateCorporateEmail = "...";
var candidatePersonalEmail = "...";
var candidateUsername = "...";

然后使用单个查询:

var existingEntity = Entities.Where(e => e.CorporateEmail.Equals(candidateCorporateEmail) || e.PersonalEmail.Equals(candidatePersonalEmail) || e.Username.Equals(candidateUsername)).FirstOrDefault();

所以布尔值很简单:

var isDuplicateCorporateEmail = existingEntity?.CorporateEmail.Equals(candidateCorporateEmail) ?? false;
var isDuplicatePersonalEmail = existingEntity?.PersonalEmail.Equals(candidatePersonalEmail) ?? false;
var isDuplicateUsername = existingEntity?.Username.Equals(candidateUsername) ?? false;

此外,记录生成的查询并确定数据库的执行计划。可能需要每列都有一个索引,或者可能需要一个复合索引。

© www.soinside.com 2019 - 2024. All rights reserved.