【发布时间】:2009-05-13 02:05:19
【问题描述】:
我正在尝试使用 Linq 将记录插入到表中,但遇到了可怕的 Cannot add an entity with a key that has been in use 错误
'If the same data exists for the same patient in a record less that 21 days old then drop it
Dim RecordLookup As Integer = 0
RecordLookup = (From rc In CDEvodb.RISKCHANGEs _
Where rc.NHI = tmpNHI And _
rc.RECDATE > Date.Now.AddDays(-21) And _
rc.BPSYS = Convert.ToDecimal(Drow.Item("BPSYS")) And _
rc.CHOL = Convert.ToDecimal(Drow.Item("CHOL")) And _
rc.HDL = Convert.ToDecimal(Drow.Item("HDL"))).Count()
If (RecordLookup = 0) Then
Dim riskchange As New RISKCHANGE
riskchange.NHI = Drow.Item("NHI")
riskchange.RECDATE = Date.Now.Date()
riskchange.RISK = CalculatedRisk
riskchange.BPSYS = Drow.Item("BPSYS")
riskchange.CHOL = Drow.Item("CHOL")
riskchange.HDL = Drow.Item("HDL")
Try
CDEvodb.RISKCHANGEs.InsertOnSubmit(riskchange)
Catch ex As Exception
myLogging.OutputError("<" & DateTime.Now.ToString & "> " & "Error - creating risk change record in dataset for patient " & Drow.Item("NHI").ToString() & " - " & ex.Message)
End Try
End If
基本上,我在表中查找不到 21 天的匹配记录(不包括身份字段)。如果找不到,我会创建一个行的实例并设置为插入它。
SubmitChanges 函数被调用了几行。
Drow 是来自先前使用 SQLClient 连接填充的 Dataset 的 DataRow(原因是我还没有完全转换到 Linq,现在只是在做新功能)。
提前干杯。
这是表的创建脚本:
USE [CDEvolution]
去
/****** 对象:表 [dbo].[RISKCHANGES] 脚本日期:05/13/2009 14:40:15 ******/
设置 ANSI_NULLS 为开
去
设置 QUOTED_IDENTIFIER 开启
去
设置 ANSI_PADDING 为开
去
创建表 [dbo].[RISKCHANGES](
[NHI] [varchar](7) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[RECDATE] [datetime] NOT NULL,
[RISK] [numeric](15, 0) NOT NULL,
[BPSYS] [numeric](15, 0) NOT NULL,
[CHOL] [numeric](15, 1) NOT NULL,
[HDL] [numeric](15, 1) NOT NULL,
[POSTED] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[IDENTITY] [uniqueidentifier] NOT NULL CONSTRAINT [DF_RISKCHANGES_IDENTITY]
默认 (newid()),
CONSTRAINT [PK_RISKCHANGES] 主键集群
(
[IDENTITY] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) 开启 [主要]
去
设置 ANSI_PADDING 关闭
【问题讨论】:
-
你能发布表格架构吗?
标签: vb.net linq-to-sql