使用FluentValidation库验证实体

时间:2014-11-09 01:21:32

标签: c# validation fluentvalidation

如何在执行更新或删除之前检查实体本身是否存在?

我尝试使用类似下面代码的内容,但收到错误"必须指定属性名称"。如何实现这样的逻辑?

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;

   }

更新:问题涉及RuleFor()中的语法 - 是否可以使用(x => x)而不指定特定属性?或者以其他方式检查正在验证的整个实体的状态?

1 个答案:

答案 0 :(得分:2)

我相信您需要在ExistsInDatabase类中编写更多功能,以便能够在数据库中执行查找,以查看是否存在具有相同主键的实体。

如果您使用的是Entity Framework,则可以在ExistsInDatabase类上使用泛型,以便它可以调用您的上下文。您可以向上下文类添加一个简单的帮助器,这些就是这些行

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

设置完成后,可以使用EF Find方法,该方法将根据主键进行搜索。像这样的东西,例如

var result = context.DbSet<Business>().Find(1);
return result == null ? false : true;