gpt4 book ai didi

c# - .NET Core - 在模型中获取 DbContext

转载 作者:行者123 更新时间:2023-12-04 00:29:51 28 4
gpt4 key购买 nike

我需要在模型中获取 ApplicationDbContext。

我正在创建一个 ValidationAttribute。该验证将检查数据库上的一些记录并在必要时生成错误。

public class MyModel
{
public int? ID { get; set; }
[MyValidationForName]
public string Name { get; set; }
}


public class MyValidationForName : ValidationAttribute
{
protected ValidationResult IsValid(object value, ValidationContext validationContext)
{
/* code here */
return new ValidationResult("This field contains an error");
}
}

上面的示例在保存记录时会生成错误 (DataAnnotation)。可以只检查日期、长度等。

但是我必须查询数据库上的一些记录。为此,不能将数据库上下文传递给模型。

我读过的所有 SO 主题都解释了如何使用 Remote 和 JS 进行验证,将验证放在 Controller 上。我不想要这个。

最相关的 SO 主题是: Using DB Context in a Custom Validation Attribute (通过添加上下文它仍然不起作用)

谁能帮我将 ApplicationDbContext 传递给模型以执行查询并使用 ValidationAttribute 对其进行验证?

最佳答案

我从来没有找到答案,即使在 Stack Overflow 上也是如此。但是很多天后,我得到了解决方案。所以,我在下面回答,我希望它有帮助。

首先添加using System.Linq;在你的模型课上。

因此,应用上下文:

var _context = (ApplicationDbContext)validationContext.GetService(typeof(ApplicationDbContext));

现在我们可以在 ValidationAttribute 中执行查询。

一个完整的例子:
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq;

public class MyModel
{

public int? ID { get; set; }

[Required(ErrorMessage = "Name can not be blank")]
[ExampleValidation]
public string Name { get; set; }

}

public class ExampleValidation : ValidationAttribute
{

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var _context = (ApplicationDbContext)validationContext
.GetService(typeof(ApplicationDbContext));

/* my query here using the _context, and if necessary, apply the error message below: */
return new ValidationResult("My error message here");

}

}
}

关于c# - .NET Core - 在模型中获取 DbContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53089235/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com