我已經使用了指定here的方法來創建組合密鑰。 SQL Server將其稱爲PrimaryKey,但它不是唯一的(!)。有沒有一種方法來指定屬性或流利API的唯一性?我發現了幾個黑客here,但這應該有可能做前期...首先在實體框架代碼中,爲什麼密鑰不是唯一的
非唯一值組合是SQLBulkCopy操作的結果。這是可能的原因嗎?
我的假設是錯誤的 - 閱讀我的答案。
我已經使用了指定here的方法來創建組合密鑰。 SQL Server將其稱爲PrimaryKey,但它不是唯一的(!)。有沒有一種方法來指定屬性或流利API的唯一性?我發現了幾個黑客here,但這應該有可能做前期...首先在實體框架代碼中,爲什麼密鑰不是唯一的
非唯一值組合是SQLBulkCopy操作的結果。這是可能的原因嗎?
我的假設是錯誤的 - 閱讀我的答案。
我的錯!這些密鑰是唯一的,包括複合鍵。我的問題是在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
組合鍵的唯一性是所有鍵的組合值。您可以在任何單個列中重複使用值,但是作爲整體的所有關鍵列不能重複爲一個序列。
我意識到這一點。但是在SQLBulkLoad操作之後,我可以得到並非唯一的組合值。現在我想到了,這可能是SQLBulkLoad本身的結果......我將編輯。 – GilShalit 2011-02-14 08:27:50