我正在尝试在我的 Core 2 项目中创建一个验证属性。它需要根据数据库中保存的现有值列表来验证该值。
下面的代码不起作用,它无法访问数据库上下文。
有什么想法为什么/如何纠正吗?
public class BibValidatorAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(
object value, ValidationContext validationContext)
{
RaceEntryViewModel raceEntry = (RaceEntryViewModel)validationContext.ObjectInstance;
ApplicationDbContext _context = new ApplicationDbContext();
var dbraceEntry = _context.RaceEntries.FirstOrDefault(c => c.Id == raceEntry.Id);
if(raceEntry.BibNumber != dbraceEntry.BibNumber)
{
if (value != null)
{
var raceentries = from r in _context.RaceEntries
select r;
var mycount = raceentries.Count(c => c.BibNumber == raceEntry.BibNumber);
if (mycount != 0)
{
return new ValidationResult("The bib number entered already exists");
}
else
{
return ValidationResult.Success;
}
}
else
{
return ValidationResult.Success;
}
}
else
{
return ValidationResult.Success;
}
}
}
我发现你可以做的是从 ValidationContext 中检索数据库上下文,我没有意识到你可以使用 GetService 来做到这一点。
var _context = (ApplicationDbContext)validationContext
.GetService(typeof(ApplicationDbContext));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)