Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Sql Server Compact Edition并发/线程安全(即非线程安全)_C#_Entity Framework 4.1_Sql Server Ce 4 - Fatal编程技术网

C# Sql Server Compact Edition并发/线程安全(即非线程安全)

C# Sql Server Compact Edition并发/线程安全(即非线程安全),c#,entity-framework-4.1,sql-server-ce-4,C#,Entity Framework 4.1,Sql Server Ce 4,在过去的几个月里,我第一次使用实体框架代码和SQLServerCE开发了一个应用程序。我发现2的组合非常有用,与我以前的做事方式(特别是ADO.NET)相比,它可以让开发速度大大加快 然而,今天早上,我和一些同事遇到了一个问题,这是我们在任何有关SQLServerCE的文档中从未见过的。它不能同时处理多个插入 在我遇到这个问题之前,我认为CE可能成为我的首选数据库。我发现这一点的原因是,在我的应用程序中,我需要一次向web服务发出多个请求,这会引入一点瓶颈,因此我继续使用并行.Invoke调用发

在过去的几个月里,我第一次使用实体框架代码和SQLServerCE开发了一个应用程序。我发现2的组合非常有用,与我以前的做事方式(特别是ADO.NET)相比,它可以让开发速度大大加快

然而,今天早上,我和一些同事遇到了一个问题,这是我们在任何有关SQLServerCE的文档中从未见过的。它不能同时处理多个插入

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

在我打开应用程序消息记录服务之前,一切都很正常。此时,我在发出web请求时开始出现以下错误:

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
是静态的,或者我的
存储库中的其他东西是静态的,导致了问题,但在嗅探之后,我确定这与我的代码无关

然后我把它提请我的同事们注意,过了一段时间,他们决定它一定是SQLServerCE,在我们都设置了不同的测试项目试图使用线程重新创建问题之后,几乎每次都会重新创建它,而当使用SQLServerExpress时,问题并没有出现

我只是觉得有点奇怪,行政长官不能处理这么简单的事情。我的意思是,问题不仅仅在于线程——你是在告诉我,它不能用于两个用户可能同时插入到一个表中的web应用程序……太疯狂了


不管怎么说,只是想知道是否有其他人在像我这样的项目中遇到过这么晚的情况,并对它的工作方式感到震惊(和恼火)?另外,如果有人能解释为什么它会以这种方式受到限制,那就太酷了。

这看起来像是SQL CE中的一个bug。请参见

您的线程是否都使用相同的连接实例,即单个DBContext但使用相同的连接对象?如果是这样,您是否尝试了每个线程的连接?我不是在创建连接对象-我使用的是conv over conf,配置中的连接字符串与我的DbContext名称匹配,因此它会自动创建自己的conn objI不知道如果您这样做,何EF管理引擎盖下的连接,它可能在幕后使用相同的连接(例如,使用单例模式)。我认为ObjectContext有一个构造函数,允许您传入自己的连接。试试看它是否解决了问题。您的唯一密钥是如何创建的?@Ladislav Entity Framework负责密钥,它只是我的POCO对象中的一个整数Id属性,db中的主键只是一个标准的自动递增主键,映射到对象的Id属性