C# 在NServiceBus端点中使用实体框架引发EntityException“;基础提供程序在打开时失败";
我有一个NServiceBus 5.2.9端点,我正在通过NServiceBus注入一个DBContext实例 配置:C# 在NServiceBus端点中使用实体框架引发EntityException“;基础提供程序在打开时失败";,c#,dependency-injection,entity-framework-6,autofac,nservicebus5,C#,Dependency Injection,Entity Framework 6,Autofac,Nservicebus5,我有一个NServiceBus 5.2.9端点,我正在通过NServiceBus注入一个DBContext实例 配置: public class ConfigureDependencyInjection : INeedInitialization { public void Customize( BusConfiguration configuration ) { configuration.RegisterComponents( reg =>
public class ConfigureDependencyInjection : INeedInitialization
{
public void Customize( BusConfiguration configuration )
{
configuration.RegisterComponents( reg =>
{
reg.ConfigureComponent<MyContext>( DependencyLifecycle.InstancePerUnitOfWork );
} );
}
}
当我尝试访问上下文字段时,我得到EntityException:
引发异常:NServiceBus.Core.dll中的“System.Data.Entity.Core.EntityException”
其他信息:基础提供程序在打开时失败
为什么会发生这种情况?
我不确定这方面的正确寿命范围是什么。是不是DependencyLifecycle.InstancePerUnitOfWork
?DBContext是一个UOW构造,但我不确定它是否与NServiceBus相同
传入此端点的消息始终是一条(传输)消息,因此这应该正确应用于使用InstancePerUnitOfWork作用域。
上下文实例在类中共享,因此每次访问它时,我都会锁定一个syncLock,如下所示:
lock ( syncLock )
{
log.Info( "Get customers..." );
var result = from c in context.Customers
...
select...;
}
在考虑线程安全的同时,如何正确使用DBContext?
非常感谢你
编辑:
连接字符串/配置正常,我在同一个位置的许多地方使用相同的上下文,正如按照app.config和/或web.config配置的那样。如何配置DbContext的连接字符串?配置在哪里?@user957902其他地方使用相同的DBContext,每个web.config的配置是可以的。如何配置DBContext的连接字符串?配置在哪里?@user957902其他地方使用相同的DBContext,每个web.config的配置是可以的。
lock ( syncLock )
{
log.Info( "Get customers..." );
var result = from c in context.Customers
...
select...;
}