2011-02-14 79 views
3

我已經使用了指定here的方法來創建組合密鑰。 SQL Server將其稱爲PrimaryKey,但它不是唯一的(!)。有沒有一種方法來指定屬性或流利API的唯一性?我發現了幾個黑客here,但這應該有可能做前期...首先在實體框架代碼中,爲什麼密鑰不是唯一的

非唯一值組合是SQLBulkCopy操作的結果。這是可能的原因嗎?

我的假設是錯誤的 - 閱讀我的答案。

回答

2

我的錯!這些密鑰是唯一的,包括複合鍵。我的問題是在SqlBulCopy類的列映射。我是做

Public Sub DoBulKCopy(dt As DataTable, cns As String) 
    Dim cn As New SqlConnection(cns) 
    cn.Open() 
    Dim copy As New SqlBulkCopy(cn) 
    For i As Integer = 0 To dt.Columns.Count - 1 
     copy.ColumnMappings.Add(i,i) 
    Next 

雖然我應該做的事情

Public Sub DoBulKCopy(dt As DataTable, cns As String) 
    Dim cn As New SqlConnection(cns) 
    cn.Open() 
    Dim copy As New SqlBulkCopy(cn) 
    For i As Integer = 0 To dt.Columns.Count - 1 
     copy.ColumnMappings.Add(dt.Columns(i).ColumnName, dt.Columns(i).ColumnName) 
    Next 

而不是假設列的順序是一樣的。

HTH

1

組合鍵的唯一性是所有鍵的組合值。您可以在任何單個列中重複使用值,但是作爲整體的所有關鍵列不能重複爲一個序列。

+0

我意識到這一點。但是在SQLBulkLoad操作之後,我可以得到並非唯一的組合值。現在我想到了,這可能是SQLBulkLoad本身的結果......我將編輯。 – GilShalit 2011-02-14 08:27:50