在 C# 中使用 Entity Framework Core 插入数据之前检查重复字符串数据的最佳实践
Posted
技术标签:
【中文标题】在 C# 中使用 Entity Framework Core 插入数据之前检查重复字符串数据的最佳实践【英文标题】:Best practice to check duplicate string data before insert data using Entity Framework Core in C# 【发布时间】:2022-01-24 05:16:11 【问题描述】:我需要关于我的代码的建议。我想要做的是在 ASP.NET Core 中使用 Entity Framework Core 在表中插入一行。
在插入新数据之前,我想检查电子邮件和电话号码是否已被使用。
我想具体返回,例如如果 return = x,则使用电子邮件。如果 return = y,则使用电话。
这是我的代码
public int Insert(Employee employee)
var checkEmail = context.Employees.Single(e => e.Email == employee.Email);
if (checkEmail != null)
var checkPhone = context.Employees.Single(e => e.Phone == employee.Phone);
if (checkPhone != null)
context.Employees.Add(employee);
context.SaveChanges();
return 1;
return 2;
return 3;
我不确定我的代码,对我的情况有什么最佳实践建议吗?
【问题讨论】:
【参考方案1】:我只是不喜欢这些表明你检查结果的“神奇数字”......你好吗,或者其他人如何知道1
或2
的含义,6 个月后从现在开始的路??
我建议或者至少创建一个常量类,让这些数字的含义更加明显:
public class CheckConstants
public const int Successful = 1;
public const int PhoneExists = 2;
public const int EmailExists = 3;
然后在你的代码中使用这些常量:
public int Insert(Employee employee)
var checkEmail = context.Employees.Single(e => e.Email == employee.Email);
if (checkEmail != null)
var checkPhone = context.Employees.Single(e => e.Phone == employee.Phone);
if (checkPhone != null)
context.Employees.Add(employee);
context.SaveChanges();
return CheckConstants.Successful;
return CheckConstants.PhoneExists;
return CheckConstants.EmailExists;
以及在任何调用此方法并需要了解返回状态码的代码中。
或者,您也可以将其更改为 枚举(而不是 int
):
public enum CheckConstants
Successful, PhoneExists, EmailExists
然后从您的方法中返回这个枚举 - 而不是 int
:
public CheckConstants Insert(Employee employee)
var checkEmail = context.Employees.Single(e => e.Email == employee.Email);
if (checkEmail != null)
var checkPhone = context.Employees.Single(e => e.Phone == employee.Phone);
if (checkPhone != null)
context.Employees.Add(employee);
context.SaveChanges();
return CheckConstants.Successful;
return CheckConstants.PhoneExists;
return CheckConstants.EmailExists;
【讨论】:
感谢您的反馈。我认为我的代码是一样的,但不同的是我们需要定义一个常量来处理返回类型。【参考方案2】:将两个数据库检查合并为一个查询
使用 SingleOrDefault 实例
public int Insert(Employee employee)
var checkEmail = context.Employees.Select (e=>new e.Email , e.Phone ).SingleOrDefault(e => e.Email == employee.Email || e.Phone == employee.Phone);
if (checkEmail == null)
context.Employees.Add(employee);
context.SaveChanges();
return 1;
else if (checkEmail.Email == employee.Email)
return 3;
else
return 2;
【讨论】:
以上是关于在 C# 中使用 Entity Framework Core 插入数据之前检查重复字符串数据的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章
C# Entity Framework中的IQueryable和IQueryProvider详解
C# Entity Framework中的IQueryable和IQueryProvider详解
C# Entity Framework 迁移,使 ID 自动递增
在 C# Entity Framework 中阅读 Oracle SYS_REFCURSOR?