C# BLL&;中的fluentvalidation;循环参考

C# BLL&;中的fluentvalidation;循环参考,c#,asp.net-core,fluentvalidation,C#,Asp.net Core,Fluentvalidation,我正在从事一个多层次的项目 我的BLL项目包含所有我的模型及其关联的验证规则。 我的DAL项目连接到DB,定义我的项目上下文,并引用BLL模型来定义映射 在我需要添加一个新规则来使用FluentValidation验证员工姓名的唯一性之前,一切都很顺利 我的BLL中我的员工模型和我的员工验证规则示例: [Validator(typeof(StaffValidator))] public class STAFF { public string FullName { get; set; }

我正在从事一个多层次的项目

我的BLL项目包含所有我的模型及其关联的验证规则。 我的DAL项目连接到DB,定义我的项目上下文,并引用BLL模型来定义映射

在我需要添加一个新规则来使用FluentValidation验证员工姓名的唯一性之前,一切都很顺利

我的BLL中我的员工模型和我的员工验证规则示例:

[Validator(typeof(StaffValidator))]
public class STAFF
{
    public string FullName { get; set; }
}

public class StaffValidator : AbstractValidator<STAFF>
    {    
    public StaffValidator()
        {
                RuleFor(cmd => cmd.FullName ).Must(BeUniqueName)
                    .WithMessage("This staff already exists");
        }

        private bool BeUniqueName(STAFF Thestaff, string fullName)
            {
                MyContext _context = new MyContext ();
                var dbStaff = _context.STAFF
                                    .Where(x => x.fullName.ToLower() == fullName.ToLower())
                                    .SingleOrDefault();

                if (dbStaff == null)
                    return true;

                return dbStaff.ID == Thestaff.ID;
            }
    }
那么,有没有办法做我想做的事?我可以在别处定义验证器属性吗

我意识到我整个项目的分层方式在这种情况下会造成困难,但我现在无法改变。因此,任何关于如何在fluentvalidation中实现这一独特规则的建议都是非常受欢迎的

谢谢你的帮助


Sylvain

实体的唯一性不是该对象本身的问题,而是其集合的问题。这就是您遇到的问题,域验证应该是自主的。此特定验证应该是BRL(而不是BLL/域)层的一部分。因此,解决方案取决于体系结构的其余部分。谢谢@HenkHolterman。这就是我试图通过添加这个验证层来处理业务规则所做的。但是,由于DAL中的模型必须由Validator属性修饰才能正常工作。我能做到吗?我的BRL中是否可以有一个派生模型,我将在其上放置验证器属性,以便进行分离或关注点?欢迎提供任何建议和示例
[Validator(typeof(StaffValidator))]