C#LINQ - 识别唯一索引违规

时间:2012-09-05 12:30:51

标签: linq sql-server-2008

我使用Linq-to-SQL访问SQL Server 2008。 在数据库中,我在某些列上有UNIQUE索引。

当我在该列中输入重复数据时,LINQ将抛出SqlException并显示错误消息。有没有办法弄清楚异常与UNIQUE索引有关,而不是其他一些SQL错误?

解决方案我知道是用户用RegEx解析异常消息,但我想知道有更优雅的方法吗?

2 个答案:

答案 0 :(得分:3)

您可以使用SQLException.Number属性。

有关详细信息,您可以迭代Errors集合,每个集合都有自己的number


顺便说一句,过去我为SqlException编写了自己的自定义序列化程序,但似乎已经覆盖了4.5 ToString(),所以现在不需要这样做。

答案 1 :(得分:1)

您可以检查具有唯一约束的表,该表是否已在约束列中具有某个值的行:

            if (linqDataContext.ConstrainedTable.Any(row => row.ConstrainedColumn == somevalue))
            {
                //show a message, saying you've already got this value
                //and it is not applicable    
            }
            else
            {
                //accept your changes with smth like this:
                linqDataContext.SubmitChanges();
            }   

另一个问题是,这种方法是否适用于您,即此查询的成本是否超过了捕获异常和处理异常的成本。如果对约束列建立索引,则该列上的简单请求不得为该值。