1

nhibernate 세션/활성 레코드 범위에 대한 활성 레코드 유효성 검사를 비활성화하는 방법이 있습니까?nhibernate 세션/활성 레코드 범위에 대해 성 활성 레코드 유효성 검사를 비활성화하는 방법이 있습니까

많은 수의 항목을 삭제하는 시나리오가 있습니다. 고객이 데이터베이스에 유효성 검사를 통과하지 못하는 데이터가있는 경우 (새 유효성 검사 규칙을 적용하기 전에 캡처했거나

데이터베이스를 구성하는 방법으로 인해 삭제할 때 기존 엔티티에 대한 유효성 검사가 일부 발생하고 예외가 발생하여 해당 엔티티가 삭제되지 않습니다.

삭제 시나리오에서 엔터티가 삭제되는 트랜잭션/세션/범위와 관련된 모든 유효성 검사를 비활성화하려는 경우이 방법이 가능합니까?

업데이트 23/01/2011

구현하지 않도록 검증에 대한 간단한 검증 활동 기록 기본 클래스 :

public class DisabledValidationProvider : IValidationProvider 
{ 
    public bool IsValid() 
    { 
     return true; 
    } 

    public bool IsValid(RunWhen runWhen) 
    { 
     return true; 
    } 

    public string[] ValidationErrorMessages 
    { 
     get { return null; } 
    } 

    public IDictionary PropertiesValidationErrorMessages 
    { 
     get { return null; } 
    } 
} 

public class DisableValidationScope : IDisposable 
{ 
    public DisableValidationScope() 
    { 
     Local.Data["DisableValidationScope"] = true; 
    } 

    public static bool IsValidationDisabled 
    { 
     get { return Local.Data["DisableValidationScope"] != null; } 
    } 

    public void Dispose() 
    { 
     Local.Data["DisableValidationScope"] = null; 
    } 
} 

public abstract class ScopeAwareValidationBase : ActiveRecordHooksValidationBase 
{ 
    static readonly IValidationProvider DisabledProvider = new DisabledValidationProvider(); 

    protected override IValidationProvider ActualValidator 
    { 
     get 
     { 
      if (DisableValidationScope.IsValidationDisabled) 
      { 
       return DisabledProvider; 
      } 
      return base.ActualValidator; 
     } 
    } 
} 

내 액티브 모델은 ScopeAwareValidationBase에서 상속하고 난 그냥 사용하여 문을 emplot 수 있습니다 내 거래 코드 주변에서 치료를합니다.

using (new DisableValidationScope()) 
{ 
    // do transactional thing... 
} 

답변

2

내가의 ActualValidator 속성을 무시로보고 싶은데 거기에 당신이 할 수 중 하나

  • 이 코드를 여부를 인스턴스마다 검증을 적용할지 여부를 결정하도록, 세터를 제공, 또는
  • (더 나은) 유효성 검사를 적용할지 여부를 결정하는 현재 SessionScope와 관련된 일부 컨텍스트를 찾습니다.

유효성 검사를 사용하지 않으려면, 당신은 더미 등 항상 IsValid()에 충실 반환 IValidationProvider,

+0

감사합니다, 올바른 방향으로 절 지적이 반환 것 - 단순한 범위를 구현 + 확인하고 그것의를 내가 필요로하는 것을 위해 충분히 잘 작동한다. – Bittercoder

관련 문제