Я использую библиотеку FluentValidation для применения уникального ограничения для одной из моих моделей:
public class Foo {
// No two Foos can have the same value for Bar
public int Bar { get; set; }
}
public class FooValidator : AbstractValidator<Foo> {
public FooValidator(ApplicationDbContext context) {
this.context = context;
RuleFor(m => m.Bar)
.Must(BeUnique).WithMessage("Bar must be unique!");
}
private readonly ApplicationDbContext context;
public bool BeUnique(int bar) {
return !context.Foos.Any(foo => foo.Bar == bar);
}
}
Значение ApplicationDbContext
вводится с использованием StructureMap.Чтобы убедиться, что контекст удаляется в конце каждого запроса, я попытался вызвать ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects()
в обработчике EndRequest
для моего приложения.
К сожалению, кажется, что метод Application_EndRequest
вызывается до того, как мой класс валидатора сможет выполнить свою работу, и контекст удаляется ко времени выполнения FooValidator.BeUnique
.
IsЕсть ли лучший способ выполнить зависящие от базы данных проверки с помощью библиотеки FluentValidation или это единственное решение для перемещения этой логики в другое место (либо в действие контроллера, в саму БД, либо, может быть, в другое место)?