NHibernate Validator выдает исключение System.NotSupportedException после обновления до 3.1

Кто-нибудь сталкивался с этим?

После обновления до NHibernate 3.1 я получаю следующее исключение от NHibernate Validator при запуске тестовых примеров NUnit:

Как видно из трассировки стека, ошибка возникает, когда сеанс сбрасывается и NHibernate Validator делает свое дело.

Обновление. Я попытался выполнить код NH Validator, и оказалось, что в какой-то момент он пытается проверить прокси-сервер Castle объекта, а не сам базовый объект. Тогда это вызывает проблемы. Не знаю, что с этим делать ...

Обновление. Проблема исчезнет, ​​если я использую LinFu ProxyFactoryFactory, а не Castle. К сожалению, LinFu дает мне другие проблемы., поэтому я не хочу его использовать.

NHibernate 3.2 устранил необходимость во внешних прокси-библиотеках.


person cbp    schedule 07.11.2011    source источник


Ответы (1)


Они все еще поддерживаются, но больше не распространяются, и по умолчанию используется внутренняя реализация.

Вы пробовали обновиться?

Обновление: чтобы скомпилировать NHibernate Validator для NH 3.2, вам необходимо изменить NHibernateHelper следующим образом:


Подробнее см. NHV-116

public static bool IsProxyFactoryConfigurated()
{
    var f = NHibernate.Cfg.Environment.BytecodeProvider.ProxyFactoryFactory;
    return f != null;
}

NHibernate Validator создан для версии 3.1 и имеет несколько ошибок компиляции, если я попытаюсь создать его для версии 3.2. Как я уже сказал, проблема исчезнет, ​​если я буду использовать прокси-провайдера LinFu, а новый встроенный провайдер NH будет построен на LinFu, поэтому я подозреваю, что проблема исчезнет. Но прокси LinFu вызывает у меня другие проблемы, и даже несмотря на то, что нам не нужен провайдер прокси Castle, я понимаю, что у нас все равно должна быть возможность использовать его, если мы захотим.

person Diego Mijelshon    schedule 10.11.2011
comment
Что это за ошибки компиляции? Это обязательно можно исправить. - person cbp; 11.11.2011
comment
Скачал NHibernate.Validator и исправил ошибку компиляции, добавил изменение в ответ. - person Diego Mijelshon; 11.11.2011
comment
Привет, спасибо, я попытался обновить до 3.2, затем с помощью NHibernate.Bytecode.DefaultProxyFactoryFactory и получил то же исключение. - person Diego Mijelshon; 11.11.2011
comment
System.NotSupportedException: вызванный член не поддерживается в динамической сборке. в System.Reflection.Emit.InternalAssemblyBuilder.GetManifestResourceStream (имя строки) в NHibernate.Validator.Cfg.XmlMappingLoader.AddResource (сборка сборки, строковый ресурс) в NHibernate.Validator.Cfg.XmlMappingLoader.Getorml тип Engine.JITClassMappingFactory.GetExternalDefinitionFor (тип типа) в NHibernate.Validator.Engine.JITClassMappingFactory.GetClassMapping (тип clazz, режим ValidatorMode) в NHibernate.Validator.Engine.ClassValidatorClassValidator.InitValidator (тип_ClassValidator. Engine.ClassValidator..ctor (Type clazz, IConstraintValidatorFactory constraintValidatorFactory, IDictionary`2 childClassValidators, IClassValidatorFactory factory) в NHibernate.Validator.Engine.StateFullClassValidatorFactory.Getine.StateFullClassValidatorFactory.GetineRonateValidator тип (тип) atValidatorEngine.StateFullClassValidatorFactory. NHibernate.Validator.Engine.ValidatorEngi ne.GetElementOrNew (тип entityType) в NHibernate.Validator.Engine.ValidatorEngine.InternalValidate (объектная сущность, Object [] activeTags) в NHibernate.Validator.Engine.ValidatorEngine.Validate (объектная сущность, NHibernate. Event.ValidateEventListener.Validate (объектная сущность, режим EntityMode) в NHibernate.Validator.Event.ValidatePreUpdateEventListener.OnPreUpdate (событие PreUpdateEvent) в NHibernate.Action.EntityUpdateAction. NHibernate \ Action \ EntityUpdateAction.cs: строка 200 в NHibernate.Action.EntityUpdateAction.Execute () в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Action \ EntityUpdateAction.cs: строка 58 в NHibernate.Engine.ActionQueue .Execute (исполняемый файл IExecutable) в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Engine \ ActionQueue.cs: строка 136 в NHibernate.Engine.ActionQueue.ExecuteActions (список IList) в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Engine \ ActionQueue.cs: строка 126 в NHibernate.Engine.ActionQueue.ExecuteActions () в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Engine \ ActionQueue.cs: строка 170 в NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions (сеанс IEventSource) : \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Event \ Default \ AbstractFlushingEventListener.cs: строка 241 в NHibernate.Event.Default.DefaultFlushEventListener. OnFlush (событие FlushEvent) в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Event \ Default \ DefaultFlushEventListener.cs: строка 19 в NHibernate.Impl.SessionImpl.Flush () в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ SessionImpl.cs: строка 1472 в TestDataAccess.FooTest.TestFoo () в FooTest.cs - person cbp; 14.11.2011