Linq to sql 自动递增LINQ to SQL DataContext中的主键;插入“;部分法

Linq to sql 自动递增LINQ to SQL DataContext中的主键;插入“;部分法,linq-to-sql,Linq To Sql,我想做的是以下几点。我有一个表Products,其中包含一个私钥ProductID。我希望在DataContext分部方法“InsertProduct”中增加ProductID,而不是在INSERT上使用SQL Server自动递增ProductID: 但是,这仅在插入第一个产品实例时有效。尝试插入第二个实例时,检索到的id与第一个实例相同 Using context As New MyDataContext Dim product1 As New Product contex

我想做的是以下几点。我有一个表Products,其中包含一个私钥ProductID。我希望在DataContext分部方法“InsertProduct”中增加ProductID,而不是在INSERT上使用SQL Server自动递增ProductID:

但是,这仅在插入第一个产品实例时有效。尝试插入第二个实例时,检索到的id与第一个实例相同

Using context As New MyDataContext

    Dim product1 As New Product
    context.Products.InsertOnSubmit(product1)
    context.SubmitChanges() 'This works

    Dim product2 As New Product
    context.Products.InsertOnSubmit(product2)
    context.SubmitChanges() 'DuplicateKeyException

End Using

我是否遗漏了一些明显的内容?

在上面的代码中,InsertProduct没有声明为分部方法。这是你的帖子中的一个打字错误,还是你声明的签名与要求的签名不同,因此没有被执行


[编辑]我不是VB程序员(我使用C#),但我认为您的代码需要声明代码的部分性以及在设计器中的部分性。无论如何,在C#中也是如此

InsertProduct在设计器生成的文件(MyDataClasses.designer.vb)中声明为分部方法


它被执行了,事实上我可以在InsertProduct中插入一个断点,并观察product1的一切正常运行。对于product2,
context.SubmitChanges()
会引发异常,但未命中断点。

我建议让SQL Server进行增量编号。在多用户场景中,如果两个用户都获得相同的ID并尝试插入相同的ID,则即使您确实使其工作,上述方法也会在负载下失败

Using context As New MyDataContext

    Dim product1 As New Product
    context.Products.InsertOnSubmit(product1)
    context.SubmitChanges() 'This works

    Dim product2 As New Product
    context.Products.InsertOnSubmit(product2)
    context.SubmitChanges() 'DuplicateKeyException

End Using