Fluent Validation C# 集合中的唯一 ID
Fluent Validation C# Unique Id in collection
我有一个实体,它有一个嵌套集合作为 属性,我将从前端应用程序接收它。
我只想确保此集合 (ICollection ChildClassCollection) 中的每个项目在我收到的模型中都有一个唯一的 ID。
我正在使用 FluentValidation,为了保持一致性,我也想添加此验证。
这是一个非常简单的问题,我找不到优雅的方法来解决..
一个例子:
public class ParentClass
{
public string Name { get; set; }
public ICollection<ChildClass> ChildClassCollection { get; set; }
}
public class ChildClass
{
public int Id { get; set; }
public string Name { get; set; }
}
public class ParentClass
{
public string Name { get; set; }
public HashSet<ChildClass> ChildClassCollection { get; set; }
}
public class ChildClass
{
public int Id { get; set; }
public string Name { get; set; }
}
是否只使用 fluentValidator 来实现这个没有任何关系?
如果是,你可以自定义一个验证器,然后使用一些逻辑来确认是否存在重复值
在数据库中,像这样:
public class ChildClassValidator : AbstractValidator<ChildClass>
{
private readonly MyDbContext _context;
public ChildClassValidator(MyDbContext context)
{
_context = context;
RuleFor(x => x.Id).NotEmpty().WithMessage("ID is required.").Must(IsUnique).WithMessage("parent have more than one ids");
}
private bool IsUnique(int id)
{
var model = _context.ParentClasses.GroupBy(x => x.Id)
.Where(g => g.Count() > 1)
.Select(y => y.Key)
.ToList(); //judge whether parentclass has duplicate id
if (model==null)
return true;
else return false;
}
}
这是我最后得到的:
PRetty cleaned,另外,当它遇到问题时,它会退出
this.RuleFor(or => or.ChildClassCollection)
.Must(this.IsDistinct)
.WithMessage("There are more than one entity with the same Id");
public bool IsDistinct(List<UpdateRoleDTO> elements)
{
var encounteredIds = new HashSet<int>();
foreach (var element in elements)
{
if (!encounteredIds.Contains(element.Id))
{
encounteredIds.Add(element.Id);
}
else
{
return false;
}
}
return true;
}
我有一个实体,它有一个嵌套集合作为 属性,我将从前端应用程序接收它。
我只想确保此集合 (ICollection ChildClassCollection) 中的每个项目在我收到的模型中都有一个唯一的 ID。
我正在使用 FluentValidation,为了保持一致性,我也想添加此验证。
这是一个非常简单的问题,我找不到优雅的方法来解决..
一个例子:
public class ParentClass
{
public string Name { get; set; }
public ICollection<ChildClass> ChildClassCollection { get; set; }
}
public class ChildClass
{
public int Id { get; set; }
public string Name { get; set; }
}
public class ParentClass
{
public string Name { get; set; }
public HashSet<ChildClass> ChildClassCollection { get; set; }
}
public class ChildClass
{
public int Id { get; set; }
public string Name { get; set; }
}
是否只使用 fluentValidator 来实现这个没有任何关系?
如果是,你可以自定义一个验证器,然后使用一些逻辑来确认是否存在重复值
在数据库中,像这样:
public class ChildClassValidator : AbstractValidator<ChildClass>
{
private readonly MyDbContext _context;
public ChildClassValidator(MyDbContext context)
{
_context = context;
RuleFor(x => x.Id).NotEmpty().WithMessage("ID is required.").Must(IsUnique).WithMessage("parent have more than one ids");
}
private bool IsUnique(int id)
{
var model = _context.ParentClasses.GroupBy(x => x.Id)
.Where(g => g.Count() > 1)
.Select(y => y.Key)
.ToList(); //judge whether parentclass has duplicate id
if (model==null)
return true;
else return false;
}
}
这是我最后得到的: PRetty cleaned,另外,当它遇到问题时,它会退出
this.RuleFor(or => or.ChildClassCollection)
.Must(this.IsDistinct)
.WithMessage("There are more than one entity with the same Id");
public bool IsDistinct(List<UpdateRoleDTO> elements)
{
var encounteredIds = new HashSet<int>();
foreach (var element in elements)
{
if (!encounteredIds.Contains(element.Id))
{
encounteredIds.Add(element.Id);
}
else
{
return false;
}
}
return true;
}