5

在过去的几个月里,我第一次使用实体框架代码和 sql server CE 开发应用程序。我发现两者的结合非常有用,并且与我以前的做事方式(尤其是 ADO.NET)相比,它可以大大加快开发速度。

然而,今天早上我和一些同事遇到了一个我们从未在任何有关 SqlServer CE 的文档中看到的问题。它一次不能处理多个刀片!

在我遇到这个问题之前,我认为 CE 可能会成为我选择的数据库。我发现这一点的原因是在我的应用程序中我需要一次向 Web 服务发出多个请求,并且它引入了一些瓶颈,所以我继续使用Parallel.Invoke调用来发出多个请求。

在我打开我的应用程序消息记录服务之前,这一切都很好。此时我在发出网络请求时开始收到以下错误:

A duplicate value cannot be inserted into a unique index. [ Table name = Accounts,Constraint name = PK__Accounts__0000000000000016 ]
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlServerCe.SqlCeException: A duplicate value cannot be inserted into a unique index. [ Table name = Accounts,Constraint name = PK__Accounts__0000000000000016 ]

我想很奇怪。我的第一个建议是它必须与 相关DbContext,也许DbContext我使用的是静态的,或者我班级中的其他东西Repository是静态的并导致问题,但在四处嗅探之后,我确信这与我的代码无关.

然后我把它引起了我的同事的注意,过了一会儿它决定它一定是 SqlServer CE,在我们都设置了不同的测试项目试图使用线程重新创建问题之后,它几乎每次都重新创建,并且在使用 Sql 时Server Express 没有出现问题。

我只是觉得 CE 不能处理这么简单的事情有点奇怪。我的意思是问题不仅在于线程 - 你是在告诉我它不能用于两个用户可能同时插入到表中的 Web 应用程序......疯狂!

无论如何,只是想知道是否有其他人像我一样在这个项目中遇到这么晚并且对它以这种方式工作感到震惊(和恼火)?此外,如果有人可以阐明为什么以这种方式受到限制,那将是很酷的。

4

1 回答 1

2

它看起来像 SQL CE 中的一个错误。请参阅http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=641518

于 2011-12-18T14:13:18.330 回答