2008-11-08 1 views
3

내가하고 싶은 것은 다음과 같습니다. 개인 키 ProductID가 포함 된 제품 테이블이 하나 있습니다. 대신 삽입에 SQL 서버 자동 증가 제품 ID를 갖는, 나는 DataContext에 부분적인 방법 "InsertProduct"그것을 증가 할 : 첫 번째 제품 인스턴스를 삽입 할 때LINQ to SQL DataContext "Insert"부분 방법의 기본 키 자동 증가

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는

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 

오전 내가 여기 분명 뭔가 빠진 첫 번째와 동일?

답변

0

InsertProduct는 위 코드에서 부분 메서드로 선언되지 않았습니다. 귀하의 게시물에 오타가 있습니까? 아니면 필요 이상으로 다른 서명으로 신고하셨습니까? 따라서 실행되지 않았습니다.

[편집] 나는 VB 프로그래머가 아니다. (나는 C#을 사용한다.) 그러나 당신의 코드는 코드뿐만 아니라 부분적으로도 선언 할 필요가 있다고 생각한다. 이것은 C#에서도 마찬가지입니다.

0

InsertProduct는 디자이너에서 생성 한 파일 (MyDataClasses.designer.vb)의 부분 메서드로 선언되었습니다.

실제로 실행되면 InsertProduct에 중단 점을 삽입하고 product1에 대해 올바르게 실행되는 모든 것을 관찰 할 수 있습니다. product2의 경우 context.SubmitChanges()에 의해 예외가 throw되지만 중단 점이 적중되지 않습니다.

2

SQL Server에서 점진적 번호 매기기를 수행하는 것이 좋습니다. 위의 방법은 다중 사용자 시나리오에서 부하가 걸려도 작동하지 않더라도 동일한 ID를 얻고 동일한 ID를 삽입하려고하면 실패합니다.

관련 문제