2010-10-15 4 views
0

J'essaie de faire fonctionner EF4 avec ncommon 1.1 qui fournit des modèles DDD tels que UnitOfWork, Specification, Repository.DDD - Enity Framework 4 et ncommon

La ligne de configuration NCommon jette l'exception suivante:

SynchronizationLockException survenue

procédé de synchronisation de l'objet a été appelé à partir d'un bloc non synchronisé de code.

Le code en jettant l'erreur est:

.ConfigureData<EFConfiguration>(config => config.WithObjectContext(() => new CoreContext(connectionString))) 

Voici le code que je suis en cours d'exécution.

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

L'avez-vous essayé sur un autre ordinateur? Je demande parce que la semaine dernière j'avais une étrange exception similaire dans le projet utilisant Unity. Sans aucun changement dans le projet de code a cessé de travailler uniquement sur mon ordinateur. J'ai dû supprimer toute la solution de mon ordinateur et supprimer le formulaire d'espace de travail TFS. Ensuite, j'ai créé un nouvel espace de travail et une solution téléchargée et cela a fonctionné. –

+0

Merci pour la réponse, je l'ai essayé sur un autre ordinateur avec le même résultat. –

Répondre

0

David,

Pouvez-vous poster la trace exacte de la pile de l'exception? Ce que je soupçonne, c'est que quelque chose d'étrange se passe pendant la construction du contexte de l'objet.

Dans NCommon lorsque vous appelez config.WithObjectContext (() => new CoreContext (connectionString)), il crée en interne une instance du contexte pour inspecter son MetadataWorkSpace. Si vous pouviez également me fournir un échantillon de repro, cela aiderait à dépister ce problème.

Merci.

+0

System.Threading.SynchronizationLockException s'est produite Message = La méthode de synchronisation d'objet a été appelée à partir d'un bloc de code non synchronisé. Source = Microsoft.Practices.Unity StackTrace: à Microsoft.Practices.Unity.SynchronizedLifetimeManager.TryExit() dans e: \ Builds \ Unity \ UnityTemp \ Compil \ Unity \ Unity \ Src \ Lifetime \ SynchronizedLifetimeManager.cs: ligne 109 InnerException: –

+0

Merci pour votre aide Ritesh, j'ai fini par supprimer le projet et le recharger à partir de SVN et tout a fonctionné. –