cbp*_*cbp 6 nhibernate nhibernate-validator
有没有遇到过这个?
升级到NHibernate 3.1后,我在运行NUnit测试用例时从NHibernate Validator收到以下异常:
System.NotSupportedException:动态程序集中不支持调用的成员.在NHibernate.Validator的NHibernate.Validator.Cfg.XmlMappingLoader.GetXmlMappingFor(Type type)的NHibernate.Validator.Cfg.XmlMappingLoader.AddResource(汇编汇编,String资源)的System.Reflection.Emit.InternalAssemblyBuilder.GetManifestResourceStream(String name)处.在NHibernate.Validator的NHibernate.Validator.Engine.ClassValidator.InitValidator(Type clazz,IDictionary`2 nestedClassValidators)的NHibernate.Validator.Engine.JITClassMappingFactory.GetClassMapping(Type clazz,ValidatorMode模式)中的Engine.JITClassMappingFactory.GetExternalDefinitionFor(Type type).在NHibernate.Validator.Engine.ValidatorEngine.GetClassValidator(Type entityType)的NHibernate.Validator.Engine.StateFullClassValidatorFactory.GetRootValidator(Type type)中的Engine.ClassValidator..ctor(Type clazz,IConstraintValidatorFactory constraintValidatorFactory,IDictionary`2 childClassValidators,IClassValidatorFactory factory)at Niber的NHibernate.Validator.Engine.ValidatorEngine.GetElementOrNew(Type entityType)Hibernate.Validator.Engine.ValidatorEngine.InternalValidate(Object entity,Object [] activeTags)at NHibernate.Validator.Ealine.ValidatorEngine.Validate(Object entity,Object [] activeTags)at NHibernate.Validator.Event.ValidateEventListener.Validate(Object entity) ,EntityMode模式)NHibernate.Validator.Event.ValidatePreUpdateEventListener.OnPreUpdate(PreUpdateEvent事件),位于d:\ CSharp\NH\NH \nhibernate\src\NHibernate\Action\EntityUpdateAction.cs中的NHibernate.Action.EntityUpdateAction.PreUpdate()中: NH中的NHibernate.Action.EntityUpdateAction.Execute()中的第200行:\ CSharp\NH\NH \nhibernate\src\NHibernate\Action\EntityUpdateAction.cs:第58行,位于NH的NHibernate.Engine.ActionQueue.Execute(IExecutable executable)中:\ CSharp\NH\NH \nhibernate\src\NHibernate\Engine\ActionQueue.cs:位于d:\ CSharp\NH\NH \nhibernate\src\NHibernate \中的NHibernate.Engine.ActionQueue.ExecuteActions(IList列表)中的第136行Engine\ActionQueue.cs:位于d:\ CSharp\NH\NH \nhibern的NHibernate.Engine.ActionQueue.ExecuteActions()中的第126行 ate\src\NHibernate\Engine\ActionQueue.cs:位于d:\ CSharp\NH\NH \nhibernate\src\NHibernate\Event\Default\AbstractFlushingEventListener中的NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource会话)的第170行. cs:第23行:NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent事件),位于d:\ CSharp\NH\NH \nhibernate\src\NHibernate\Event\Default\DefaultFlushEventListener.cs:第19行,位于NHibernate.Impl.SessionImpl .FlT中的.Flush():CSharp\NH\NH \nhibernate\src\NHibernate\Impl\SessionImpl.cs:FooTest.cs中TestDataAccess.FooTest.TestFoo()的第1472行
正如您从堆栈跟踪中看到的那样,当刷新会话并且NHibernate Validator执行其操作时会发生错误.
更新我试过单步执行NH Validator代码,似乎在某些时候它试图验证实体的Castle代理,而不是底层实体本身.这就引起了麻烦.不知道该怎么办......
更新如果我使用LinFu ProxyFactoryFactory而不是Castle,问题就会消失.不幸的是,LinFu给了我其他问题所以我不想使用它.
NHibernate 3.2 不再需要外部代理库。
它们仍然受支持,但不再分发,默认情况下是使用内部实现。
您尝试过升级吗?
更新:为了编译NH 3.2的NHibernate Validator,您需要修改NHibernateHelper如下:
public static bool IsProxyFactoryConfigurated()
{
var f = NHibernate.Cfg.Environment.BytecodeProvider.ProxyFactoryFactory;
return f != null;
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请阅读NHV-116
| 归档时间: |
|
| 查看次数: |
610 次 |
| 最近记录: |