作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 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/
我是一名优秀的程序员,十分优秀!