2

我有两个 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 上,但我只是对为什么它的工作方式不同感到困惑!?

4

1 回答 1

0

一定是你的表的定义有问题 2.具体用主键列就可以了。也许它有一个唯一约束,这就是它抛出异常的原因,但它肯定不是它的主键。

于 2012-09-13T15:06:40.653 回答