DDD - Enity Framework 4 и 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 ответ
Дэвид,
Не могли бы вы опубликовать точную трассировку стека исключения? Я подозреваю, что во время создания контекста объекта происходит нечто странное.
В NCommon, когда вы вызываете config.WithObjectContext(() => новый CoreContext(connectionString)), он внутренне создает экземпляр контекста для проверки его MetadataWorkSpace. Если бы вы могли также предоставить мне пример репродукции, это помогло бы отследить эту проблему.
Благодарю.