Y at-il un moyen de désactiver la validation Active Record pour une portée nhibernate session/active? J'ai un scénario dans lequel nous effectuons la suppression d'un grand nombre d'éléments - et dans certains cas, les clients ont des données dans leur base de données qui ne seront pas validées (elles ont été capturées avant l'introduction de nouvelles règles de validation ou Lors de la suppression, en raison de la construction de la base de données, certaines vérifications de validation sur les entités existantes se produisent, et échouent avec une exception - empêchant la suppression de ces entités.Existe-t-il un moyen de désactiver la validation Castle Active Record pour une portée nhibernate session/active
Pour le scénario de suppression, nous souhaitons désactiver toute validation associée à la transaction/session/portée dans laquelle les entités sont supprimées, est-ce possible?
Mise à jour 23/01/2011
Mise en œuvre d'une simple validation classe de base d'enregistrement actif pour désactiver la validation:
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;
}
}
}
Mes modèles ActiveRecord héritent de ScopeAwareValidationBase et je peux juste emplot une déclaration à l'aide autour de mon code de transaction, fonctionne un régal.
using (new DisableValidationScope())
{
// do transactional thing...
}
Merci, qui m'a orienté dans la bonne direction - mettre en œuvre un simple champ + vérifier et il est Je travaille assez bien pour ce dont j'ai besoin. – Bittercoder