gpt4 book ai didi

c# - MVC - 验证 - ViewModel 是否应该有权访问数据库

转载 作者:太空狗 更新时间:2023-10-29 21:22:41 24 4
gpt4 key购买 nike

我有一个 View 模型,它应该检查新实体的标签是否是唯一的(尚未在数据库中)。

目前我已经在 View 模型类中完成了:

     public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (PowerOrDuty != null)
{
if (PowerOrDuty.Identifier == null)
{
using (var db = new PowersAndDutiesContext())
{
var existingLabels = db.PowersAndDuties.Select(pod => pod.Label);
if (existingLabels.Contains(PowerOrDuty.Label))
{
yield return new ValidationResult("Cannot create a new power or duty because another power or duty with this label already exists");
}
}
}
......

请注意,这是一个带有小型数据库的小型内部应用程序,我的时间有限,因此代码并不完美。

我觉得从 View 模型访问数据库可能是一种不好的做法。 View 模型应该直接访问数据库吗?它应该能够调用存储库来获取可用标签吗?是否应该在 Controller 中完成需要数据库访问的验证?

最佳答案

Should view model have direct DB access?

我认为应该不惜一切代价避免这种情况

Should it be able to call a repository to get the available labels ?

这不是 ViewModel 的关注点。这会在您的 ViewModel 测试中引入一些复杂性(几乎不需要)我想这是麻烦的迹象。

Should validation requiring DB access be done in a controller instead ?

也许,如果“DB”是指“存储库”。但是我想到的是一个单独的自定义验证类,您将能够在另一个 Controller 中插入(取消)插入、测试和重用它以进行 ajax 验证等

关于c# - MVC - 验证 - ViewModel 是否应该有权访问数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19860067/

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