DDD - 实体框架4并不常见

时间:2010-10-15 03:31:00

标签: c#-4.0 entity-framework-4 ddd-repositories ncommon

我正在尝试让EF4使用ncommon 1.1,它提供了DDD模式,例如UnitOfWork,Specification,Repository。

NCommon配置行抛出以下异常:

发生了SynchronizationLockException

从非同步代码块调用对象同步方法。

抛出错误的实际代码是:

.ConfigureData<EFConfiguration>(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);
    }

1 个答案:

答案 0 :(得分:0)

大卫,

你能发布异常的确切堆栈跟踪吗?我怀疑在对象上下文的构造过程中会发生一些奇怪的事情。

在NCommon中,当你调用config.WithObjectContext(()=&gt; new CoreContext(connectionString))时,它会在内部创建一个上下文实例来检查它的MetadataWorkSpace。如果你也可以给我一个repro样本,它将有助于追踪这个问题。

感谢。