我有一个NServiceBus 5.2.9端点,我正在通过NServiceBus注入一个DBContext实例。
配置:
public class ConfigureDependencyInjection : INeedInitialization
{
public void Customize( BusConfiguration configuration )
{
configuration.RegisterComponents( reg =>
{
reg.ConfigureComponent<MyContext>( DependencyLifecycle.InstancePerUnitOfWork );
} );
}
}
这是服务的构造函数:
public NotificationService( IBus bus, IMyContext context )
{
this.bus = bus;
this.context = context;
}
当我尝试访问上下文字段时,我得到了EntityException:
抛出异常:&#39; System.Data.Entity.Core.EntityException&#39;在NServiceBus.Core.dll中 附加信息:基础提供程序在Open上失败。
为什么会这样?
我不确定正确的生命周期范围是什么。是DependencyLifecycle.InstancePerUnitOfWork
吗? DBContext是一个UOW构造,但我不确定它是否与NServiceBus相同。
此端点的消息始终是ONE(传输)消息,因此这应该适用于使用InstancePerUnitOfWork范围。
上下文实例在类中共享,因此每次访问它时都会锁定syncLock,如下所示:
lock ( syncLock )
{
log.Info( "Get customers..." );
var result = from c in context.Customers
...
select...;
}
如何在保持线程安全的同时正确使用DBContext?
非常感谢你。
修改 连接字符串/配置没问题,我在同一个地方使用相同的上下文,根据app.config和/或web.config配置。