繁体   English   中英

MVC 2唯一索引验证

[英]MVC 2 Unique index validation

有没有一种方法可以验证模型上唯一的属性? 例如,用户可以创建和编辑“产品”,但他们不能使用现有的ProductCode创建产品,也不能编辑产品并将ProductCode更改为已存在的代码。

我尝试使用自定义属性。

public class Unique : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var products = Repository.Store.Products.Where(x => x.ProductCode == value);
        return (products.Count() == 0);
    }
}

我可以用此解决方案介绍的所有内容是,当数据库中已经存在代码时,不允许用户插入/更新产品。 这不允许用户编辑现有产品,因为当他们提交时,它将看到代码已经存在(它将是他们尝试编辑的产品的代码。)并返回false。

在MVC 2中没有办法处理唯一索引,我已经搜索了数小时,甚至发现了关于stackoverflow的其他主题,但是没有一个可靠的解决方案。

只需让插入或更新失败,然后向用户返回适当的错误消息即可。 无论如何,预先检查还是有问题的,因为总是有另一个用户在检查后立即修改数据库的可能性。

这是一个示例,说明如何插入对象并确定它是否由于唯一约束而失败:

INSERT INTO MyTable (column1, column2, column3) 
    SELECT @param1, @param2, @param3
    WHERE NOT EXISTS (SELECT * FROM table WHERE id = @param4)

如果对象已经存在,这将修改0行。 如果没有,它将修改1行。 如果有其他问题,您将获得一个例外。 这也是非常有效的(至少在SQL Server中)。 正如您所希望的那样,它导致索引查找,然后进行索引更新。

在相关领域,我与MVC有点挣扎。

我的问题的部分答案是,您应该“大概”拥有一个单独的对象插入和更新模型。

这样,您可以仅在插入模型上具有自定义属性。

否则,只需在插入方法(而不是自定义属性)中将其作为常规代码检查来解决即可。

好的我明白了....

您可以对对象上某个唯一ID的存在进行“不等于”检查吗-这样您就可以检查当前产品上是否存在产品代码BUT。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM