簡體   English   中英

在自定義驗證屬性中使用數據庫上下文

[英]Using DB Context in a Custom Validation Attribute

我正在嘗試在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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM