有没有人遇到过这个?
升级到NHibernate 3.1后,我在运行NUnit测试用例时从NHibernate Validator收到以下异常:
System.NotSupportedException:不支持调用的成员 动态装配。在 System.Reflection.Emit.InternalAssemblyBuilder.GetManifestResourceStream(字符串 姓名)at NHibernate.Validator.Cfg.XmlMappingLoader.AddResource(大会 assembly,String resource)at NHibernate.Validator.Cfg.XmlMappingLoader.GetXmlMappingFor(Type type) 在 NHibernate.Validator.Engine.JITClassMappingFactory.GetExternalDefinitionFor(类型 输入) NHibernate.Validator.Engine.JITClassMappingFactory.GetClassMapping(类型 clazz,ValidatorMode模式)at NHibernate.Validator.Engine.ClassValidator.InitValidator(类型clazz, IDictionary`2 nestedClassValidators)at NHibernate.Validator.Engine.ClassValidator..ctor(类型clazz, IConstraintValidatorFactory constraintValidatorFactory,IDictionary`2 childClassValidators,IClassValidatorFactory factory)at NHibernate.Validator.Engine.StateFullClassValidatorFactory.GetRootValidator(类型 输入) NHibernate.Validator.Engine.ValidatorEngine.GetClassValidator(类型 entityType)at NHibernate.Validator.Engine.ValidatorEngine.GetElementOrNew(类型 entityType)at NHibernate.Validator.Engine.ValidatorEngine.InternalValidate(对象 entity,Object [] activeTags)at NHibernate.Validator.Engine.ValidatorEngine.Validate(对象实体, Object [] activeTags)at NHibernate.Validator.Event.ValidateEventListener.Validate(对象 实体,EntityMode模式) NHibernate.Validator.Event.ValidatePreUpdateEventListener.OnPreUpdate(PreUpdateEvent 事件)在NHibernate.Action.EntityUpdateAction.PreUpdate()中 d:\ CSHARP \ NH \ NH \的nhibernate \ SRC \ NHibernate的\行动\ EntityUpdateAction.cs: NHibernate.Action.EntityUpdateAction.Execute()中的第200行 d:\ CSHARP \ NH \ NH \的nhibernate \ SRC \ NHibernate的\行动\ EntityUpdateAction.cs: NHibernate.Engine.ActionQueue.Execute(IExecutable 可执行的) d:\ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Engine \ ActionQueue.cs:line 在NHibernate.Engine.ActionQueue.ExecuteActions(IList列表)中的136 d:\ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Engine \ ActionQueue.cs:line 在NHibernate.Engine.ActionQueue.ExecuteActions()中的126 d:\ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Engine \ ActionQueue.cs:line 170点到 NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource 会议) d:\ CSHARP \ NH \ NH \的nhibernate \ SRC \ NHibernate的\事件\默认\ AbstractFlushingEventListener.cs: 第241行 NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent 事件) d:\ CSHARP \ NH \ NH \的nhibernate \ SRC \ NHibernate的\事件\默认\ DefaultFlushEventListener.cs: 在NHibernate.Impl.SessionImpl.Flush()中的第19行 d:\ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ SessionImpl.cs:line 1472在FooTest.cs中的TestDataAccess.FooTest.TestFoo()
从堆栈跟踪中可以看出,当刷新会话并且NHibernate Validator完成它时会发生错误。
更新我试过单步执行NH Validator代码,似乎在某些时候它试图验证实体的Castle代理,而不是底层实体本身。这就引起了麻烦。不知道该怎么做......
更新如果我使用LinFu ProxyFactoryFactory而不是Castle,问题就会消失。不幸的是,LinFu正在给我other problems所以我不想使用它。
答案 0 :(得分:1)
NHibernate 3.2删除了对外部代理库的需求。
它们仍然受支持,但它们不再分发,默认是使用内部实现。
您是否尝试过升级?
更新:为了编译NH 3.2的NHibernate Validator,您需要修改NHibernateHelper
,如下所示:
public static bool IsProxyFactoryConfigurated()
{
var f = NHibernate.Cfg.Environment.BytecodeProvider.ProxyFactoryFactory;
return f != null;
}
有关详细信息,请阅读NHV-116