2008-11-08 44 views
3

我想要做的是以下幾點。我有一個包含私鑰ProductID的表,產品。而不必在插入的SQL Server自動遞增的ProductID的,我想增加它的DataContext的分部方法「InsertProduct」:自動遞增LINQ to SQL DataContext中的主鍵「插入」部分方法

Partial Public Class MyDataContext 

    Private Sub InsertProduct(ByVal instance As Product) 

     Dim id As Integer = Me.Products.Max(Function(p As Product) p.ProductID) + 1 
     instance.ProductID = id 

     Me.ExecuteDynamicInsert(instance) 

    End Sub 

End Class 

然而,插入第一個產品實例時,這纔有效。當試圖插入第二個實例時,檢索到的ID與第一個相同,我在這裏丟失了一些明顯的東西嗎?

回答

0

InsertProduct未在上面的代碼中聲明爲部分方法。這是你的文章中的錯字,還是你用不同的簽名聲明瞭它,因此它沒有被執行?我不是一個VB程序員(我使用C#),但我認爲你的代碼需要聲明部分以及在設計器中的代碼。無論如何,這在C#中都是如此。

0

InsertProduct在設計器生成的文件(MyDataClasses.designer.vb)中聲明爲部分方法。

它被執行,事實上我可以在InsertProduct中插入一個斷點並觀察所有正確運行product1的斷點。對於product2,context.SubmitChanges()引發異常,但未命中斷點。

2

我真的會推薦讓SQL Server做增量編號。上述方法,即使你得到它的工作,在多用戶場景下的負載下也會失敗,他們都得到相同的ID並嘗試插入相同的ID。