Max*_*eev 6 c# validation asp.net-mvc asp.net-mvc-4
我有一个视图模型,应检查新实体的标签是否唯一(不在DB中).
目前我在视图模型类中完成了它:
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");
}
}
}
......
Run Code Online (Sandbox Code Playgroud)
请注意,这是一个小型内部应用程序,小数据库,我的时间有限,所以代码并不完美.
我觉得从视图模型访问数据库可能是一种不好的做法.视图模型是否应该直接访问数据库?它应该能够调用存储库来获取可用的标签吗?是否应该在控制器中进行需要DB访问的验证?
视图模型是否应该直接访问数据库?
我认为应该不惜一切代价避免这种情况
它应该能够调用存储库来获取可用的标签吗?
这不是ViewModel的关注点.这会在ViewModel的测试中引入一些复杂性(几乎不需要),我想这是一个麻烦来的迹象.
是否应该在控制器中进行需要DB访问的验证?
也许,如果用"DB"表示"存储库".但是我想到的是一个单独的自定义验证类,您可以(在其他控制器中进行插件,测试和重用)进行ajax验证等.