1

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

当我在该列中输入重复数据时,LINQ 将抛出带有错误消息的 SqlException。有没有办法确定异常与 UNIQUE 索引有关,而不是与其他 SQL 错误有关?

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

4

2 回答 2

3

您可以使用该SQLException.Number物业。

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


顺便说一句,过去我已经编写了自己的自定义序列化程序,SqlException但似乎在 4.5ToString()中已被覆盖,因此现在没有必要。

于 2012-09-05T12:39:27.100 回答
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();
            }   

另一个问题,这种方法是否适用于你,即这个查询的成本是否超过了捕获异常并处理它的成本。如果受约束的列被索引,那么对该列的简单请求一定不会那么昂贵。

于 2012-09-05T23:57:50.870 回答