Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 无法为标识列插入显式值_Vb.net_Entity Framework_Ef Code First - Fatal编程技术网

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

Vb.net 无法为标识列插入显式值,vb.net,entity-framework,ef-code-first,Vb.net,Entity Framework,Ef Code First,创建新记录时出现上述错误。我不想插入标识——数据库自动生成了标识,这很好 以下是确切的例外情况: [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 IDE

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

以下是确切的例外情况:

[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
以下是完整程序的要点。我在一个测试项目中尝试了这一点,因为我认为在EF中继承时会遇到一些问题(还没有完成)


谢谢

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

请从“Id”列中删除auto-identity属性。或者,也可以在查询/存储过程中使用。这将使您能够在表中输入显式Id值,即使在列上设置了自动标识。(虽然不是一个经常使用的好主意,但它有助于修复)

然后在每个表格插入后:

SET IDENTITY_INSERT dbo.YourTableName OFF;
GO

你得到了什么例外?为Body添加了例外谢谢。我只是从上下文中删除了一些部分,效果很好。有没有一种方法可以配置EF,使PartRevisions在表方面不与Part共享任何内容?@eyston:没有,这是模型中的继承如何映射到数据库架构的方法,基本上是:派生类=>表之间的共享主键。对于通过应用
属性配置的表每类型继承(TPT),至少是这种情况。您还可以使用每层次表(TPH)(通过删除该属性)。EF会期望在一个表中为基类型和派生类型指定所有列(
Parts
)=表之间没有连接。我刚刚创建了一个“BasePart”,它既继承自,也可以工作。我没有意识到这会和我现在所做的有所不同。我不确定这是否是我想要做的,我只是想尝试一下,了解不同的处理方式。谢谢
SET IDENTITY_INSERT dbo.YourTableName ON;
GO
SET IDENTITY_INSERT dbo.YourTableName OFF;
GO