我目前正在使用EF4和WCF处理在不同渠道(电子邮件,私人消息,应用程序消息)中传递的数千条消息的调度程序服务。并行访问EF4实体(并行+ EF4)
要尽量加快信息调度我想要使用的Parallels:
Parallel.ForEach(currentMessageList, m =>
{
Processors.DispatcherWrapper.Dispatch(m, m.unfChannels.AgentName, m.unfChannels.AgentParameters);
}
);
我的调度方法使用反射来匹配通道配置方法,并同时处理每封邮件,但我有很大的问题,尝试更新线程内EF对象时,我做的SaveChanges()到全球实体(它的初始化上的Application_Start)
问题有各种口味的:
- 空对象引用
- 列表项属性是对象的关键信息的一部分,无法修改。
- 底层提供程序在打开时失败。
- 新事务是不允许的,因为会话中还有其他线程在运行。 (强制连接打开后如果关闭)
问题是如果EF4是线程安全的以实现这种情况? 我的方法是让全球实体获得最佳解决方案,还是应该按EF4初始化进行每项任务?
任何帮助是受欢迎的,我已经失去了2个小时试图找出一个可能的解决方法。
尝试初始化一个新的Entitie,并得到:一个EdmType不能映射到CLR类多次。 EdmType''被映射多次。 – hmf 2010-09-22 15:02:49
ObjectContext不是线程安全的。 http://stackoverflow.com/questions/3258357/good-advices-to-use-ef-in-a-multithread-program – 2010-09-22 17:27:12