如何在执行更新或删除之前检查实体本身是否存在?
我尝试使用类似下面代码的内容,但收到错误"必须指定属性名称"。如何实现这样的逻辑?
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)而不指定特定属性?或者以其他方式检查正在验证的整个实体的状态?
答案 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;