gpt4 book ai didi

vb.net - InsertOnSubmit = 无法添加具有已在使用的 key 的实体

转载 作者:行者123 更新时间:2023-12-03 00:34:47 24 4
gpt4 key购买 nike

我尝试使用 Linq 将记录插入到表中,但出现了可怕的无法使用已在使用的 key 添加实体错误

'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 连接填充的数据集的 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()),

约束[PK_RISKCHANGES]主键聚集

(

[IDENTITY] ASC

)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]

)在[主要]

开始

设置 ANSI_PADDING 关闭

最佳答案

如果您更新 DBML,请将其 (IsDbGenerate="true") 添加到 PK 成员:

    <Column Name="[IDENTITY]" Member="IDENTITY" Type="System.Guid" 
DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true"
CanBeNull="false" IsDbGenerated="true"/>

它会让 SQL 分配默认值 (newid())。

否则它将发送未初始化的guid('00000000-0000-0000-0000-000000000000'),据我所知,这本质上是导致问题的原因。

您的另一个选择可能是扩展分部类并在 OnCreated() 事件中初始化 GUID(它不使用列的 newid() 默认值,但确实解决了问题:

    partial class RISKCHANGE
{
partial void OnCreated()
{
_IDENTITY = Guid.NewGuid();
}
}

请注意,对于现有实体(由查询填充),在处理 OnLoaded() 时,该值将被正确的值覆盖。

关于vb.net - InsertOnSubmit = 无法添加具有已在使用的 key 的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/855738/

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