Есть ли способ отключить проверку Active Record для сеанса 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;
}
}
}
Мои модели ActiveRecord наследуются от ScopeAwareValidationBase, и тогда я могу просто использовать оператор использования вокруг моего кода транзакции, это работает.
using (new DisableValidationScope())
{
// do transactional thing...
}