c# - 在某些情况下不会抛出 DuplicateKeyException

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

最佳答案

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

关于c# - 在某些情况下不会抛出 DuplicateKeyException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12409235/

相关文章:

c# - 如何防止 WCF 服务进入故障状态?

c# - 使用 HtmlAgilityPack 仅选择特定 DIV 中的项目

c# - 使用相同日期查询数据库不返回数据

asp.net - 管理员角色和用户角色的配置

asp.net - 对对象 'aspnet_CheckSchemaVersion'、数据库 'XXX' 的 EXECUTE 权限被拒绝

c# - 等同于 C# 中的协议(protocol)和委托(delegate)

c# - Visual Studio 单步进入不返回

c# - 从 Web API 方法获取原始 POST 数据

asp.net - 使用分页在 RadGrid Telerik 中查找记录

.net - 从命令行检查是否安装了 .NET