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