我使用Linq-to-SQL访问SQL Server 2008。 在数据库中,我在某些列上有UNIQUE索引。
当我在该列中输入重复数据时,LINQ将抛出SqlException并显示错误消息。有没有办法弄清楚异常与UNIQUE索引有关,而不是其他一些SQL错误?
解决方案我知道是用户用RegEx解析异常消息,但我想知道有更优雅的方法吗?
答案 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();
}
另一个问题是,这种方法是否适用于您,即此查询的成本是否超过了捕获异常和处理异常的成本。如果对约束列建立索引,则该列上的简单请求不得为该值。