gpt4 book ai didi

asp.net - LINQ:无法在具有唯一索引的对象 'dbo.tblOutstandingCompletions' 中插入重复的键行

转载 作者:行者123 更新时间:2023-12-01 13:09:21 24 4
gpt4 key购买 nike

我有一个应用程序 (ASP.NET 3.5),允许用户在需要时重新运行特定进程。该过程将记录插入到 MS SQL 表中。我在 Try/Catch 中有插入,如果记录已存在,则忽略捕获(标题中的错误将有效)。这在使用 ADO 时效果很好,但在我对 LINQ 进行了讨论后,我注意到了一件有趣的事情。如果重新运行流程时,表中已经有记录,即使没有现有记录,任何新记录也会因相同的错误而被拒绝。
代码如下:

            Dim ins = New tblOutstandingCompletion
With ins
.ControlID = rec.ControlID
.PersonID = rec.peopleID
.RequiredDate = rec.NextDue
.RiskNumber = 0
.recordType = "PC"
.TreatmentID = 0
End With

Try
ldb.tblOutstandingCompletions.InsertOnSubmit(ins)
ldb.SubmitChanges()
Catch ex As Exception
' An attempt to load a duplicate record will fail
End Try

数据库的 DataContext 是在 Page Load 期间设置的。

我通过在每次插入之前重新定义 DataContext 解决了这个问题:
        ldb = New CaRMSDataContext(sessionHandler.connection.ToString)
Dim ins = New tblOutstandingCompletion

虽然我已经解决了这个问题,但我想知道是否有人可以解释一下。如果没有 DataContext 重新定义,如果没有重复记录,应用程序将完美运行。

问候
詹姆士

最佳答案

听起来 DataContext 认为记录是第一次插入的,所以如果你不重新定义上下文,它会拒绝第二次插入,因为它“知道”记录已经存在。重新定义上下文会强制它实际检查数据库以查看它是否在那里,而它不在那里。那是 LINQ 试图保存到数据库的往返行程。像您所做的那样创建一个新的上下文会强制它重置它对数据库的“了解”。

关于asp.net - LINQ:无法在具有唯一索引的对象 'dbo.tblOutstandingCompletions' 中插入重复的键行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/376454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com