【发布时间】: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