LINQ to SQL - 数据库生成一个已在使用的密钥

时间:2009-07-22 11:42:40

标签: c# sql-server linq-to-sql

我有一个简单的问题,即读取Excel文件(使用互操作)并使用从中提取的一些数据填充MSSQL数据库文件。到目前为止这很好。 我有一个Shops表,其中包含以下字段:

  • ID:int,自动生成,自动同步:插入
  • 名称:字符串
  • 结算:字符串
  • 县:字符串
  • 地址:字符串

我读取excel文件,然后创建一个新的Shops对象并设置Name,Settlement,County和Address属性,并使用新的Shops对象调用Shops.InsertOnSubmit()。

在此之后我必须重置数据库(至少是表),我发现最简单的方法是调用DeleteDatabase()方法,然后再次调用CreateDatabase()。 问题是,在第一次重置后,当我再次尝试填充表时,我得到异常:数据库生成了一个已经在使用的密钥。

此外,从那时起,我无法使用该数据库文件,因为DatabaseExists()返回FALSE,但是当我调用CreateDatabase()方法时,它会抛出一个异常,数据库已经存在(尽管数据文件不存在。)

我做错了什么? 非常感谢你提前!

3 个答案:

答案 0 :(得分:4)

听起来你正在重新使用超出明智的数据环境。删除数据库后尝试处理并重新创建数据上下文。

我怀疑问题是身份管理器仍在跟踪对象(破坏和重新创建数据库是一种边缘情况,我认为我们可以原谅它不在此重置自己。)

答案 1 :(得分:2)

我遇到了这个错误。我有一个带有身份的日志表。当我的应用程序运行时,我正在截断日志。发生了什么事情,当我被截断时,数据库会再次启动标识列,但是我用来记录的数据上下文仍然有使用相同密钥跟踪的对象。

答案 2 :(得分:0)

我遇到了这个错误,因为我使用带有标识列的表的插入的自定义存储过程,但我忘了在我的sproc结尾处“SET @Id = SCOPE_IDENTITY”。

我实际上并没有使用生成的标识值,所以当我插入两行或更多行时,问题才出现。棘手的错误。