2014-05-01 8 views
5

Ich habe eine Tabelle (Verknüpfungstabelle) mit 3 Primärschlüssel so, wenn ich doppelte Datensätze überprüfen möchten, I 3 Eigenschaften überprüfen müssen zusammen(Best Practice) FluentValidation und Überprüfung Doppelte Entities

Ich schrieb ein Verfahren wie dieses

private bool IsDuplicate(long roleId, long componentGroupId, long operationId) 
    { 
     var business = new RoleGroupBusiness(); 
     var result = business.Where(x => x.RoleID == roleId && x.ComponentGroupID == componentGroupId && x.OperationID == operationId).Any(); 
     return result; 
    } 

und ich habe eine FluentValidator Klasse wie folgt:

public class RoleGroupValidator : AbstractValidator<RoleGroup> 
{ 

    private bool IsDuplicate(long roleId, long componentGroupId, long operationId) 
    { 
     var business = new RoleGroupBusiness(); 
     var result = business.Where(x => x.RoleID == roleId && x.ComponentGroupID == componentGroupId && x.OperationID == operationId).Any(); 
     return result; 
    } 
    public RoleGroupValidator() 
    { 
     RuleFor(x => x.RoleID).NotNull().WithMessage("A"); 
     RuleFor(x => x.ComponentGroupID).NotNull().WithMessage("A"); 
     RuleFor(x => x.OperationID).NotNull().WithMessage("A");  
    } 

} 

1) Wie kann ich IsDuplicate methid in FluentValidator verwenden?

oder

2) Was ist am besten Weg Einheit zur Überprüfung Doppelte oder nicht in fluentValidation Library?

RuleFor hol mir nur Wert eines der Eigenschaften, aber ich brauche Wert aller Eigenschaften für

meiner Methode übergeben

Antwort

0

Dieser Code wurde nicht getestet, aber ich habe etwas Ähnliches getan, einen Dummy-Wert in der Verwendung Methode, die nie für irgendetwas verwendet wird.

private bool NotBeDuplicate(RoleGroup r, long dummy) 
{ 
    var business = new RoleGroupBusiness(); 
    var result = business.Where(x => x.RoleID == r.RoleID && x.ComponentGroupID == r.ComponentGroupID && x.OperationID == r.OperationID).Any(); 
    return !result; 
} 

public RoleGroupValidator() 
{ 
    RuleFor(x => x.RoleID).Must(NotBeDuplicate); 
} 

Hoffentlich weist Sie das in die richtige Richtung.

5

Sie sollten Must-Methode verwenden:

public class RoleGroupValidator : AbstractValidator<RoleGroup> 
{ 
    public RoleGroupValidator() 
    { 
     RuleFor(x => x.RoleID).NotNull().WithMessage("A"); 
     RuleFor(x => x.ComponentGroupID).NotNull().WithMessage("A"); 
     RuleFor(x => x.OperationID).NotNull().WithMessage("A"); 
     RuleFor(x => x).Must(x => !IsDuplicate(x)); 
    } 

    private bool IsDuplicate(RoleGroup r) 
    { 
     var business = new RoleGroupBusiness(); 
     return business.Any(x => x.RoleID == r.RoleID && 
           x.ComponentGroupID == r.ComponentGroupID && 
           x.OperationID == r.OperationID); 
    } 
} 

Vergessen Sie nicht, RoleGroupBusiness Instanz zu entsorgen, wenn es Einweg ist (es wahrscheinlich ist):

private bool IsDuplicate(RoleGroup r) 
{ 
    using (var business = new RoleGroupBusiness()) 
    { 
     return business.Any(x => x.RoleID == r.RoleID && 
          x.ComponentGroupID == r.ComponentGroupID && 
          x.OperationID == r.OperationID); 
    } 
}