C# 您会对数据库调用使用fluent验证吗
通过流畅的验证,您可以在更新密码之前验证简单的内容,如NotNull、NUMBERGREATER、userMustExistsOnDb或更高级的业务规则 我感觉当我使用fluent验证时,我的DB调用次数是不使用它时的两倍。这里有一个例子C# 您会对数据库调用使用fluent验证吗,c#,database,fluentvalidation,C#,Database,Fluentvalidation,通过流畅的验证,您可以在更新密码之前验证简单的内容,如NotNull、NUMBERGREATER、userMustExistsOnDb或更高级的业务规则 我感觉当我使用fluent验证时,我的DB调用次数是不使用它时的两倍。这里有一个例子 public class DeleteCustomerRequestValidator: AbstractValidator<DeleteCustomerRequest> { public DeleteCUstomerRequestValida
public class DeleteCustomerRequestValidator: AbstractValidator<DeleteCustomerRequest> {
public DeleteCUstomerRequestValidator() {
RuleFor(customer => customer.Id).GreaterThan(0);
RuleFor(customer => customer.Id).Must(ExistsOnDB).WithMessage("The customer does not exists");
}
private bool ExistsOnDB(int customerId) {
// DB call to check if exists on Db
return Respository.Customers.Any(x => x.Id == customerId) // CALL NUMBER 1
}
}
然而,如果我不使用Fluent验证,我将只进行一次呼叫,以从DB获得客户
public void DeleteCustomer(int customerId)
{
if (customerId < 1)
{
/// Return error.
}
Customer customer = Repository.Customers.FirstOrDefault(x => x.Id); // Only 1 CALL
if (customer == null)
{
// Return error.
}
Repository.Customers.Delete(customer)
Repository.Save()
}
public void DeleteCustomer(int customerId)
{
如果(客户ID<1)
{
///返回错误。
}
Customer=Repository.Customers.FirstOrDefault(x=>x.Id);//仅1次调用
如果(客户==null)
{
//返回错误。
}
Repository.Customers.Delete(客户)
Repository.Save()
}
我做错了什么?有更好的方法吗
谢谢您的时间。一般来说,我会说不,不要使用流利的验证
如果希望有一个IsValid和一个进程中发生的错误列表,则需要FluidValidation。在这种情况下,您将添加一个验证,确认整个删除成功,如果没有成功,验证将记录为什么没有成功。但不是每行代码的验证 打开SQL Server profiler,看看有哪些调用碰到了DBA,尽管我可以理解这个简单验证案例的答案。在某些情况下,存在许多验证,然后您可能会将验证逻辑划分到多个位置。我认为更好的方法是将db查询的结果作为。一个更好的方法是缓存结果,然后您就不需要关心多个调用,只要它们在缓存到期时间的边界内
public void DeleteCustomer(int customerId)
{
if (customerId < 1)
{
/// Return error.
}
Customer customer = Repository.Customers.FirstOrDefault(x => x.Id); // Only 1 CALL
if (customer == null)
{
// Return error.
}
Repository.Customers.Delete(customer)
Repository.Save()
}