【问题标题】:DuplicateKeyException not being thrown in some circumstances在某些情况下不会抛出 DuplicateKeyException
【发布时间】:2012-09-13 15:01:28
【问题描述】:

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

【问题讨论】:

  • 需要查看 Table1 和 Table2 SQL DDL 以了解您如何在数据库中设置字段和键
  • 查看数据上下文。由于某种原因,Table2(LINQ 端)不知道约束或不强制执行它。

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


【解决方案1】:

你的表2的定义肯定有问题。特别是主键列就可以了。也许它有一个Unique Constraint,这就是它抛出异常的原因,但它肯定不是它的主键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多