C# 用于检查数据库中是否存在实体的FluentValidator扩展方法

C# 用于检查数据库中是否存在实体的FluentValidator扩展方法,c#,fluentvalidation,ef-core-2.2,C#,Fluentvalidation,Ef Core 2.2,我有一个非常常见的情况,当在给定实体中设置引用属性时,我需要进行验证。当发生这种情况时,我会这样验证: 公共类验证程序:AbstractValidator { 公共验证器() { ... RuleFor(用户=>user.EmployeeId) .MustNotBeEmpty() .MustAsync(ExistInDatabase).WithMessage(“未找到员工”); } 公共异步任务ExistInDatabase(命令、字符串id、CancellationToken Cancella

我有一个非常常见的情况,当在给定实体中设置引用属性时,我需要进行验证。当发生这种情况时,我会这样验证:

公共类验证程序:AbstractValidator
{
公共验证器()
{
...
RuleFor(用户=>user.EmployeeId)
.MustNotBeEmpty()
.MustAsync(ExistInDatabase).WithMessage(“未找到员工”);
}
公共异步任务ExistInDatabase(命令、字符串id、CancellationToken Cancellation)
{
return wait_context.Employees.AnyAsync(x=>x.Id==Id.ToGuid());
}
}
这个和其他签入数据库非常常见,我在几乎每个验证器中都编写了这样的方法

我想把它转换成一个扩展方法,在其中传递实体类型、上下文和id

FluentValidation
扩展方法如下所示:

公共静态IRuleBuilder选项不得为空(此IRuleBuilder规则)
{
返回规则
.NotEmpty().WithMessage(“O campo'{PropertyName}'nãO pode ser vazio”);
}
但是这些扩展方法已经收到泛型类型,我不知道如何传递另一个泛型类型以与
context.Set().AnyAsync(…)

怎么可能呢

-----更新-----

我尝试向扩展方法添加另一个泛型类型
T2
,但它不起作用:

公共静态IRuleBuilder选项必须存在于数据库(此IRuleBuilder规则,DatabaseContext上下文),其中T2:BaseEntity
{
返回规则.MustAsync(async(command,id,cancelation)=>wait context.Set().AnyAsync(x=>x.id==id.ToGuid()).WithMessage(“{PropertyName}”未在数据库中找到”);
} 
当我试图调用它时,编译器抱怨它找不到这样的扩展方法:

公共类验证程序:AbstractValidator
{
公共验证器()
{
...
RuleFor(用户=>user.EmployeeId)
.MustNotBeEmpty()
.MustextinDatabase();
}
}

您需要知道
T
context.Set()
有哪些类型限制,并将这些相同的类型限制添加到扩展方法中的
T
泛型类型中。@GregBurghardt我已经尝试过了,但它确实能识别扩展方法。我用我的尝试更新了这个问题。