在实体框架代码中,为什么密钥不是唯一的

时间:2011-02-14 07:24:36

标签: entity-framework

我使用指定的方法here来创建复合键。 SQL Server将其称为PrimaryKey,但它不是唯一的(!)。有没有办法在属性或流畅的API中指定唯一性?我发现了几个hacks here,但这应该可以提前做...

非唯一值组合是SQLBulkCopy操作的结果。这是可能的原因吗?

[编辑]我的假设是错误的 - 请继续阅读我的答案。

2 个答案:

答案 0 :(得分: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 :(得分:1)

复合键的唯一性是所有键的组合值。您可以在任何单个列中包含重复值,但所有键列作为一个整体不能作为序列重复。