Entity framework 实体框架3.5中处理并发的锁表
我们有一个web服务,它接受车辆上发生的任何故障的XML文件。然后,web服务使用EF3.5将这些文件加载到超规范化数据库。通常,XML文件的处理时间为10-20秒。我需要处理两种并发场景:Entity framework 实体框架3.5中处理并发的锁表,entity-framework,concurrency,Entity Framework,Concurrency,我们有一个web服务,它接受车辆上发生的任何故障的XML文件。然后,web服务使用EF3.5将这些文件加载到超规范化数据库。通常,XML文件的处理时间为10-20秒。我需要处理两种并发场景: 不同的车辆同时发送XML文件:这不是问题。EF的默认乐观并发性确保我能够将所有这些文件存储在相同的表中,因为它们的数据是互斥的 同一车辆同时发送多个文件:当我的系统试图同时将相同或类似的数据写入数据库时,这会产生问题。这并不罕见 我们需要第二点的解决方案 为了解决这个问题,我引入了一个锁表。基本上,当我开始
处理这种情况的最佳方法是什么?我不想从数据库回滚任何内容,因为单个文件涉及许多表 您希望得到什么样的解决方案?您当前使用锁表的方法正是您所需要的。如果由于重复而引发异常,您可以等待并稍后重试,或者将键入的错误发回客户端,让客户端稍后上载文件。这两种解决方案都很难看,但这正是您的应用程序目前提供的
更好的解决方案是用另一个解决方案替换当前的web服务,其中web服务调用只会将作业添加到队列中,一些后台进程将处理这些作业,并确保同一辆车的两个文件不会同时处理。这也将为peek情况提供更好的吞吐量控制。缺点是,您必须实现一些通知,说明文件已被处理,因为它不会联机。由于我们不能使用消息队列,我想最好的选择是,如果锁表仅如@Ladislav所述。