在某些情况下不会抛出DuplicateKeyException

时间:2012-09-13 15:01:28

标签: c# asp.net .net linq linq-to-sql

我有两个SQL表,每个表都有一个由三个不同整数字段组成的复合键。我已经添加了如下代码来向Table1添加记录。

try
{
    Table1 newRow = new Table1
    {
        DomainID = domainID,
        ConfigurationID = configID,
        ReasonID = reasonID
    };

    data.Table1.InsertOnSubmit(newRow);
    data.SubmitChanges();
}
catch(DuplicateKeyException)
{
    // Message to user about no duplicates allowed.
}

如果用户尝试添加重复行并且我可以向他们显示消息等,这完全适用于我计划和捕获异常的方式。一切都很好。但是,我有用于插入Table2的代码(几乎相同,但在不同的页面上使用不同的DataContext),

try
{
    Table2 newRow = new Table2
    {
        DomainID = domainID,
        ConfigurationID = configID,
        DirectionID = directionID
    };

    data.Table2.InsertOnSubmit(newRow);
    data.SubmitChanges();
}
catch(DuplicateKeyException)
{
    // Message to user about no duplicates allowed.
}    

不会抛出DuplicateKeyException而是抛出SqlException。没什么大不了的,因为我仍然可以测试

e.Number = 2627

关于捕获的SqlException,但我只是为什么它的工作方式不同而感到困惑??

1 个答案:

答案 0 :(得分:0)

表格的定义一定存在问题2.特别是上面有主键列。也许它有Unique Constraint,这就是它抛出异常的原因,但它肯定不是它的主键。