当值不相同时违反主键

时间:2016-05-13 14:20:17

标签: c# sql-server entity-framework tsql

我的数据库中有以下数据:

enter image description here

注意光标所在的位置,因此该字段后面有一些空格。然后我调用以下代码来插入一个新值:

 var tagList = new List<ProductTag> { new ProductTag { Name = "diepvries" } };
 var sbCopy = new SqlBulkCopy(_dataContext.Database.Connection.ConnectionString) { BulkCopyTimeout = 60 * 10 };
 sbCopy.WriteToServer(tagList.AsDataReader());

但是,抛出以下异常

  

违反PRIMARY KEY约束'PK_dbo.ProductTags'。不能   在对象'dbo.ProductTags'中插入重复键。重复的密钥   价值是(diepvries)。

我还测试了文本“diepvries2”并且它有效。我做错了什么?

2 个答案:

答案 0 :(得分:6)

根据this page

  

“SQL Server遵循ANSI / ISO SQL-92规范(第8.2节,   &lt; Comparison Predicate&gt;,一般规则#3)关于如何比较字符串   有空格。 ANSI标准要求填充字符   比较中使用的字符串,以便它们的长度匹配   比较它们。

答案 1 :(得分:2)

什么样的DB? 我知道在SQL服务器中,字符串是&#34;填充&#34;在比较之前使用相同长度的白色空格。因此,就SQL数据库而言,您的两个字符串是相同的。 细节是here