【发布时间】:2012-09-05 12:30:50
【问题描述】:
我正在使用 Linq-to-SQL 访问 SQL Server 2008。 在数据库中,我在某些列上有唯一索引。
当我在该列中输入重复数据时,LINQ 将抛出带有错误消息的 SqlException。有没有办法确定异常与 UNIQUE 索引有关,而不是与其他 SQL 错误有关?
我知道的解决方案是使用 RegEx 来解析异常消息,但我想知道有没有更优雅的方法?
【问题讨论】:
标签: linq sql-server-2008
我正在使用 Linq-to-SQL 访问 SQL Server 2008。 在数据库中,我在某些列上有唯一索引。
当我在该列中输入重复数据时,LINQ 将抛出带有错误消息的 SqlException。有没有办法确定异常与 UNIQUE 索引有关,而不是与其他 SQL 错误有关?
我知道的解决方案是使用 RegEx 来解析异常消息,但我想知道有没有更优雅的方法?
【问题讨论】:
标签: linq sql-server-2008
您可以使用SQLException.Number 属性。
有关更多详细信息,您可以迭代 Errors 集合,每个集合都有自己的 number。
顺便说一句,过去我为SqlException 编写了自己的自定义序列化程序,但似乎在4.5 中ToString() 已被覆盖,因此现在没有必要这样做。
【讨论】:
您可以检查具有唯一约束的表,以确定它是否已经在受约束的列中有具有某个值的行:
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();
}
另一个问题,这种方法是否适用于您,即此查询的成本是否超过了捕获异常并处理它的成本。如果受约束的列被索引,那么对该列的简单请求一定不会那么昂贵。
【讨论】: