Проверка сущности с использованием библиотеки FluentValidation

1

Как я могу проверить, что сам объект существует до выполнения обновления или удаления?

Я попытался использовать что-то вроде кода ниже, но получаю сообщение об ошибке "Имя свойства должно быть указано". Как реализовать такую логику?

public CustomValidator()
{
     RuleFor(x=>x).Must(ExistsInDatabase).WithMessage("Attempt to work with nonexistent entity");
}

private bool ExistsInDatabase(MyClass myClassInstance)
{

     if (myClassInstance == null)
           return false;

     return true;

   }

UPDATE: вопрос касается синтаксиса в RuleFor() - можно ли использовать (x => x) без указания конкретного свойства? или каким-либо другим способом проверить состояние всего объекта, который будет проверен?

Теги:
validation
fluentvalidation

1 ответ

2
Лучший ответ

Я считаю, что вам нужно будет написать больше функциональности в свой класс ExistsInDatabase, чтобы он мог выполнять поиск в базе данных, чтобы определить, существует ли сущность, которая имеет тот же первичный ключ.

Если вы используете Entity Framework, вы можете использовать generics в классе ExistsInDatabase, чтобы он мог вызвать ваш контекст. Вы можете добавить простого помощника в свой контекстный класс, что-то в этом направлении

public virtual IDbSet<T> DbSet<T>() where T : class
    {
        return this.Set<T>();
    }

Когда у вас есть набор, вы можете использовать метод поиска EF, который будет искать на основе первичного ключа. Что-то вроде этого, например

var result = context.DbSet<Business>().Find(1);
return result == null ? false : true;
  • 0
    Как передать всю сущность в метод ExistsInDatabase ()?
  • 0
    когда вы говорите RuleFor (x => x) .Must (ExistsIndatabase), каково значение x в этой точке? Не могли бы вы показать, как вы используете это, возможно, объявление в тестовом методе, который показывает, что он используется. Оттуда мы сможем определить, как вы могли бы продолжить. Что я делаю, так это все мои объекты наследуют от базового класса, то есть абстрактного класса с определенными свойствами. Если бы у вас было это, вы могли бы просто ожидать это как параметр в вашем методе ExistsInDatabase.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню