【问题标题】:DDD - Enity Framework 4 and ncommonDDD - 实体框架 4 和通用
【发布时间】:2010-10-15 03:31:00
【问题描述】:

我正在尝试让 EF4 与 ncommon 1.1 一起使用,它提供了 DDD 模式,例如 UnitOfWork、规范、存储库。

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);
    }

【问题讨论】:

  • 你在其他电脑上试过了吗?我问是因为上周我在使用 Unity 的项目中遇到了类似的奇怪异常。没有对代码进行任何更改,项目仅在我的计算机上停止工作。我不得不从我的计算机中删除整个解决方案并从 TFS 中删除工作区。然后我创建了新的工作区并下载了解决方案,它工作了。
  • 谢谢你的回复,我在另一台电脑上试过了,结果一样。

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


【解决方案1】:

大卫,

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

在 NCommon 中,当您调用 config.WithObjectContext(() => new CoreContext(connectionString)) 时,它会在内部创建上下文实例以检查它的 MetadataWorkSpace。如果您还可以向我提供重现样本,这将有助于追查此问题。

谢谢。

【讨论】:

  • System.Threading.SynchronizationLockException 发生消息=从未同步的代码块调用对象同步方法。 Source=Microsoft.Practices.Unity StackTrace:在 Microsoft.Practices.Unity.SynchronizedLifetimeManager.TryExit() 中的 e:\Builds\Unity\UnityTemp\Compile\Unity\Unity\Src\Lifetime\SynchronizedLifetimeManager.cs:line 109 InnerException:
  • 感谢您的帮助 Ritesh,我最终删除了项目并从 SVN 重新加载,一切正常。
猜你喜欢
  • 1970-01-01
  • 2017-05-21
  • 2017-02-11
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多