我有一个 Linq to SQL 数据库表,我正在使用 ExecuteCommand 执行截断。在此截断之后,我需要立即将初始记录添加到表中,但代码因“重复 ID”问题而失败,表明截断不是立即的。
有没有办法强制截断立即发生,或者等到所有更改都提交后再插入?
(附加:程序失败后,如果我重新运行它 - 表已被截断并且核心按预期工作以插入新行)
我有一个 Linq to SQL 数据库表,我正在使用 ExecuteCommand 执行截断。在此截断之后,我需要立即将初始记录添加到表中,但代码因“重复 ID”问题而失败,表明截断不是立即的。
有没有办法强制截断立即发生,或者等到所有更改都提交后再插入?
(附加:程序失败后,如果我重新运行它 - 表已被截断并且核心按预期工作以插入新行)
截断是立即的,但 LINQ to SQL 不知道你做了什么。它无法解释原始 SQL。因此它无法知道它已加载到内存中的所有实体现在都已在数据库中消失了。
数据库和 DataContext 的内存状态现在不同步。
ID 在 L2S 身份管理器中是重复的,因为只有一个具有给定键的实体可以共存于同一个 DataContext 中(这绝对是有道理的)。如果您仔细阅读该错误,您会发现它不是 SqlException。
最简单的解决方案是在执行截断后使用新的 DataContext。更复杂的解决方案将涉及刷新加载实体的状态。我不确定它是如何工作的,所以你需要自己研究。