gpt4 book ai didi

vb.net - 无法为标识列插入显式值

转载 作者:行者123 更新时间:2023-12-01 15:07:35 25 4
gpt4 key购买 nike

创建新记录时出现上述错误。我不想插入身份——数据库自动生成了它,这很棒。

这是确切的异常(exception):

[System.Data.UpdateException]
{"An error occurred while updating the entries. See the inner exception for details."}
{"Cannot insert explicit value for identity column in table 'PartRevisions' when IDENTITY_INSERT is set to OFF."}

这是映射:

Public Class PartContext
Inherits DbContext

Public Property Parts As DbSet(Of Part)
Public Property PartRevisions As DbSet(Of PartRevision)


Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder)
MyBase.OnModelCreating(modelBuilder)

modelBuilder.Entity(Of PartRevision)().HasKey(Function(r) r.Id).Property(Function(r) r.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
End Sub

End Class

<Table("Parts")>
Public Class Part
<Key(), DatabaseGenerated(DatabaseGeneratedOption.Identity)>
Public Property Id As Integer

Public Property PartNumber As String
Public Property Owner As String
End Class

<Table("PartRevisions")>
Public Class PartRevision
Inherits Part

Public Property OriginalId As Integer
Public Property RevisionDate As DateTime
Public Property RevisionNumber As Integer
Public Property RevisionBy As String

End Class

如果我不使用继承,它工作正常。如果我使 Id 可重写并在子类上指定属性,它仍然不起作用。

我正在做 OnModelCreating 的事情只是因为我想让它工作。我觉得没有这个它应该可以工作。当然,它甚至不适用于此...

当我在 SQL Management Studio 中执行以下查询时,它工作正常:

insert into PartRevisions (originalid, revisiondate, revisionnumber, revisionby, partnumber, owner)
values (1, '1/1/2013', 1, 'eep', '123', 'ME')

这是完整程序的要点。我在一个测试项目中对此进行了尝试,因为我假设我会遇到一些在 EF 中进行继承的问题(尚未完成)。

https://gist.github.com/eyston/4956444

谢谢!

最佳答案

PartRevisions 表不得将 Id 列设置为自动生成的标识,只能将表 Parts 设置为基本类型。这两个表具有共享的主键。 EF 在查询 PartRevision 时连接两个表,如果插入 PartRevision 实体,它会将行插入到两个表中。因为两行必须具有相同的 Id 只有一个可以是身份。

关于vb.net - 无法为标识列插入显式值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14883963/

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