C# 在AbstractValidator中的FluentValidation期间设置属性值<;T>;

C# 在AbstractValidator中的FluentValidation期间设置属性值<;T>;,c#,asp.net-core-webapi,fluentvalidation,C#,Asp.net Core Webapi,Fluentvalidation,我已经使用.net核心Web API创建了一个API端点,该API用于在我的系统中创建合同。在插入数据之前,我正在使用FluentValidation验证属性。有一个场景,我从API端点获取一个字符串作为输入(即,{center:“testcenter”,group:“testGroup”,company:“testCompany”})(GUID被忽略,但如果字符串属性值有效,我必须根据字符串属性值设置GUID([JsonIgnore]属性)并在DB中验证字符串是否存在。如果数据库中存在字符串(

我已经使用.net核心Web API创建了一个API端点,该API用于在我的系统中创建合同。在插入数据之前,我正在使用FluentValidation验证属性。有一个场景,我从API端点获取一个字符串作为输入(即,
{center:“testcenter”,group:“testGroup”,company:“testCompany”}
)(GUID被忽略,但如果字符串属性值有效,我必须根据字符串属性值设置GUID([JsonIgnore]属性)并在DB中验证字符串是否存在。如果数据库中存在字符串(中心、组和公司),我必须从数据库中设置guid(CenterId、GroupId和CompanyId),而不是strings属性。老实说,我不知道如何在AbstractValidator构造函数中使用FluentValidation设置属性值。如果有人知道,请分享你的意见。仅供参考,我已将数据附在表中。

公共类合同
{
[JsonIgnore]
公共Guid中心ID{get;set;}
[JsonIgnore]
公共Guid?公司ID{get;set;}
[JsonIgnore]
公共Guid?GroupId{get;set;}
公共字符串中心{get;set;}
公共字符串公司{get;set;}
公共字符串组{get;set;}
}
公共类ContractValidator:AbstractValidator{
公共合同确认人(IUsersRepository usersRepository){
规则(c=>c.公司)
.MustAsync((command,company)=>usersRepository.Exists(command.company))
.When(c=>c.Company!=string.Empty)
.WithMessage(命令=>$“公司不存在”);
规则(c=>c.Center)
.MustAsync((command,center)=>usersRepository.Exists(command.center))
.When(c=>c.Center!=string.Empty)
.WithMessage(命令=>$“中心不存在”);
规则(c=>c.Group)
.MustAsync((命令,组)=>usersRepository.Exists(命令.组))
.When(c=>c.Group!=string.Empty)
.WithMessage(命令=>$“组不存在”);
}
}

我认为您希望以错误的方式使用FluentValidation。在我看来,验证器不能更改正在验证的模型。这不是验证器的责任。是否有其他方法来实现此功能?因为当我将输入传递给属性时。它将首先验证DB中的字符串值。在这之后,我必须根据DB中的字符串值获取Guid,以便映射属性值。所以我总共需要两次点击数据库来验证这些属性。相反,一旦在AbstractValidator中验证了字符串属性,该方法将根据字符串值返回Guid。这样我就可以避免再打一次分贝。这就是我尝试这样做的原因。也许您应该手动填充标识符,然后在不使用存储库的情况下验证您的模型。在这种情况下,只需点击一次DB。
    public class Contract
    {
            [JsonIgnore]
            public Guid CenterId { get; set; }
            [JsonIgnore]
            public Guid? CompanyId { get; set; }
            [JsonIgnore]
            public Guid? GroupId { get; set; }

            public string Center { get; set; }

            public string Company { get; set; }

            public string Group { get; set; }
    }

    public class ContractValidator : AbstractValidator<Contract> {
        public ContractValidator(IUsersRepository usersRepository) {
            RuleFor(c => c.Company)
                .MustAsync((command, company) => usersRepository.Exists(command.Company))
                .When(c => c.Company != string.Empty)
                .WithMessage(command => $"Company does not exist");
             RuleFor(c => c.Center)
                .MustAsync((command, center) => usersRepository.Exists(command.Center))
                .When(c => c.Center!= string.Empty)
                .WithMessage(command => $"Center does not exist");
RuleFor(c => c.Group)
                .MustAsync((command, group) => usersRepository.Exists(command.Group))
                .When(c => c.Group!= string.Empty)
                .WithMessage(command => $"Group does not exist");
        }
    }