SQL:" System.Data.Linq.DuplicateKeyException"

时间:2015-05-08 08:40:02

标签: sql .net sql-server linq

我是编程新手。为了熟悉F#和SQL Server,我决定尝试实现找到的here代码。我已将其粘贴在下方,以方便那些不想点击该链接的人:

let newRecord = new dbSchema.ServiceTypes.Table1(Id = 100,
                                                 TestData1 = 35, 
                                                 TestData2 = 2.0,
                                                 Name = "Testing123")
let newValues =
    [ for i in [1 .. 10] ->
          new dbSchema.ServiceTypes.Table3(Id = 700 + i,
                                           Name = "Testing" + i.ToString(),
                                           Data = i) ]
// Insert the new data into the database.
db.Table1.InsertOnSubmit(newRecord)
db.Table3.InsertAllOnSubmit(newValues)
try
    db.DataContext.SubmitChanges()
    printfn "Successfully inserted new rows."
with
   | exn -> printfn "Exception:\n%s" exn.Message

我在SQL Server中创建了两个名为Table1和Table 3的表。最初,我将每个表中的主键设置为ID。运行上面的代码立即返回此输出:

  

例外:无法添加具有已在使用的密钥的实体。

我开始随机尝试各种解决问题的方法(糟糕的做法,我知道!),基于我通过谷歌搜索异常找到的信息。我采取的一种方法是将每个表中的主键更改为" Name"代替。这一次,没有抛出异常。

我的问题已经解决,但我不明白是怎么回事。所以我的问题是:

  1. 为什么最初会抛出异常?它与我设置的事实有关吗?#34; Id"作为主键?
  2. 我是否将主键更改为" Name"根除错误?如果是这样,那有什么用呢?为什么会有所作为呢?
  3. 提前感谢您的帮助。如果我的问题不够详细,请告诉我。

1 个答案:

答案 0 :(得分:1)

这看起来应该有用 - Id应该是唯一的。

以下是一些调试指针:

  1. 获取SQL的原始界面,以便您自己输入查询。

  2. 在运行代码之前,请确保该表为空。

  3. 通过在sql客户端中输入原始sql来测试系统,看它是否有效。
  4. 祝你好运。