升级到3.1后,NHibernate Validator会抛出System.NotSupportedException

时间:2011-11-07 04:50:05

标签: nhibernate nhibernate-validator

有没有人遇到过这个?

升级到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所以我不想使用它。

1 个答案:

答案 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