2009-07-22 46 views
5

我有一个简单的问题,它读取Excel文件(使用互操作)和填充用从中提取了一些数据的MSSQL数据库文件。目前为止没有问题。 我有以下字段的商店表:的LINQ to SQL - 数据库生成的密钥已在使用

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

我读的Excel文件,然后创建一个新的商店对象,并设置名称,结算,县,地址PROPERT我打电话给Shops.InsertOnSubmit()和新的Shops对象。

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

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

我在做什么错? 非常感谢您提前!

回答

4

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

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

+0

非常感谢你,我的配置数据上下文删除数据库之后再重新实例并重新创建它,所以它现在的工作。非常感谢你! 还有一件事:我如何'释放'我迄今创建的数据库? MSSQL不会允许我使用该名称创建数据库... – ShdNx 2009-07-22 12:04:43

+0

我不知道,恐怕。 – 2009-07-22 12:09:44

2

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

0

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

我没有实际使用所产生的标识值这样的问题只出现了,当我插入两列以上。棘手的bug。