我正在编写一个通过更改跟踪器实体状态工作的验证器。我试图制作一种方法来验证实体是否未被更改。
我有一个看起来像这样的验证器:
ConversationStateValidator : ValidatorByState<Conversation>
{
EntityEntry CurrentEntry { get; set; }
protected override void InitializeModifiedRules()
{
this.RuleFor(x => x.EmployeeUserId).Must().NotChanged(CurrentEntry );
}
}
我无法弄清楚如何从IRuleBuilder获取指向属性的表达式
static void NotChanged<T, TProperty>(IRuleBuilder<T, TProperty> ruleBuilder, EntityEntry entityEntry)
{
//I want to do something like this to get the x => x.EmployeeUserId
ruleBuilder.GetExpectedPropertyAccessor();
}
有谁知道我如何访问预期的属性访问器。
答案 0 :(得分:0)
您正在以错误的方式使用FluentValidation。 Validator是某种类型的应用程序服务。一个验证器实例可以验证许多实体。
AbstractValidator具有验证规则的内部集合,您可以通过反射获取PropertyRule,但这是错误的方式。
答案 1 :(得分:0)
您可以通过半遮蔽的方式获得它。这依赖于实现细节,但它似乎可以正常工作,并且没有反射。
public static RuleBuilder<TEntity, TProp> AsRuleBuilder<TEntity, TProp>(this IRuleBuilder<TEntity, TProp> ruleBuilder)
{
return ruleBuilder.As<RuleBuilder<TEntity, TProp>>();
}