C# 4.0 DDD-Enity框架4和ncommon

C# 4.0 DDD-Enity框架4和ncommon,c#-4.0,entity-framework-4,ddd-repositories,ncommon,C# 4.0,Entity Framework 4,Ddd Repositories,Ncommon,我试图让EF4与NCommon1.1一起工作,它提供DDD模式,如UnitOfWork、Specification、Repository NCommon配置行引发以下异常: 发生SynchronizationLockException 从未同步的代码块调用了对象同步方法 引发错误的实际代码是: .ConfigureData<EFConfiguration>(config => config.WithObjectContext(() => new CoreContext(c

我试图让EF4与NCommon1.1一起工作,它提供DDD模式,如UnitOfWork、Specification、Repository

NCommon配置行引发以下异常:

发生SynchronizationLockException

从未同步的代码块调用了对象同步方法

引发错误的实际代码是:

.ConfigureData<EFConfiguration>(config => config.WithObjectContext(() => new CoreContext(connectionString)))
.ConfigureData(config=>config.WithObjectContext(()=>new CoreContext(connectionString)))
下面是我正在运行的代码

private static void ConfigureIoc()
    {
        var container = new UnityContainer();
        var serviceLocator = new UnityServiceLocator(container);
        ServiceLocator.SetLocatorProvider(() => serviceLocator);

        container
            .RegisterType(typeof(IUnitOfWorkScope), typeof(UnitOfWorkScope), new InjectionConstructor())
            .RegisterType(typeof(IList<>), typeof(List<>), new InjectionConstructor())
            .RegisterType<IVerticalRepository, EfVerticalRepository>()
            ;

        const string connectionString = 
               @"metadata=res://*/Core.csdl|res://*/Core.ssdl|res://*/Core.msl;provider=System.Data.SqlClient;provider connection string="";Data Source=devdatabase;Initial Catalog=InfoChoiceAdmin;Persist Security Info=True;User ID=sa;Password=sa;MultipleActiveResultSets=True""";

        var adapter = new UnityContainerAdapter(container);

        NCommon.Configure.Using(adapter)
            .ConfigureState<DefaultStateConfiguration>()
            .ConfigureData<EFConfiguration>(config => config.WithObjectContext(() => new CoreContext(connectionString)))
            .ConfigureUnitOfWork<DefaultUnitOfWorkConfiguration>(config => config.AutoCompleteScope());

        Ioc.Initialize(serviceLocator);
    }
private static void ConfigureIoc()
{
var container=new UnityContainer();
var serviceLocator=新的UnityServiceLocator(容器);
ServiceLocator.SetLocatorProvider(()=>ServiceLocator);
容器
.RegisterType(typeof(IUnitOfWorkScope)、typeof(UnitOfWorkScope)、new InjectionConstructor())
.RegisterType(typeof(IList)、typeof(List)、new InjectionConstructor())
.RegisterType()
;
常量字符串连接字符串=
@“metadata=res://*/Core.csdl | res://*/Core.ssdl | res://*/Core.msl;provider=System.Data.SqlClient;provider connection string=”“;数据源=devdatabase;初始目录=InfoChoiceAdmin;持久安全信息=True;用户ID=sa;密码=sa;MultipleActiveResultSets=True”“;
var适配器=新的UnityContainerAdapter(容器);
NCommon.Configure.Using(适配器)
.ConfigureState()
.ConfigureData(config=>config.WithObjectContext(()=>new CoreContext(connectionString)))
.ConfigureUnitOfWork(config=>config.AutoCompleteScope());
初始化(serviceLocator);
}
大卫

您可以发布异常的确切堆栈跟踪吗?我怀疑的是在对象上下文的构造过程中发生了一些奇怪的事情

在NComon中,当您调用config.WithObjectContext(()=>new CoreContext(connectionString))时,它会在内部创建上下文实例以检查其MetadataWorkSpace。如果你也能提供我一个复制样品,这将有助于跟踪这个问题


谢谢。

你在其他电脑上试过了吗?我这样问是因为上周我在使用Unity的项目中遇到了类似的奇怪异常。在代码中没有任何更改的情况下,project仅在我的计算机上停止工作。我不得不从我的计算机中删除整个解决方案,并从TFS中删除工作区。然后,我创建了新的工作区并下载了解决方案,它成功了。感谢您的响应,我已在另一台计算机上尝试过,结果相同。System.Threading.SynchronizationLockException Occessage=对象同步方法是从未同步的代码块调用的。Source=Microsoft.Practices.Unity StackTrace:e:\Builds\Unity\UnityTemp\Compile\Unity\Unity\Src\Lifetime\SynchronizedLifetimeManager.cs:line 109 InnerException:Thanx中的Microsoft.Practices.Unity.SynchronizedLifetimeManager.TryExit()中的Microsoft.Practices.SynchronizedLifetimeManager。