6

有没有人遇到过这个?

升级到 NHibernate 3.1 后,在运行 NUnit 测试用例时,我从 NHibernate Validator 收到以下异常:

System.NotSupportedException :动态程序集中不支持调用的成员。在 System.Reflection.Emit.InternalAssemblyBuilder.GetManifestResourceStream(String name) 在 NHibernate.Validator.Cfg.XmlMappingLoader.AddResource(Assembly assembly, String resource) 在 NHibernate.Validator.Cfg.XmlMappingLoader.GetXmlMappingFor(Type type) 在 NHibernate.Validator。 NHibernate.Validator.Engine.ClassValidator.InitValidator(Type clazz, IDictionary`2 nestedClassValidators) 的 NHibernate.Validator.Engine.JITClassMappingFactory.GetClassMapping(Type clazz, ValidatorMode mode) 的 Engine.JITClassMappingFactory.GetExternalDefinitionFor(Type type)。 Engine.ClassValidator..ctor(类型 clazz,IConstraintValidatorFactory constraintValidatorFactory,IDictionary`2 childClassValidators,

正如您从堆栈跟踪中看到的那样,当会话被刷新并且 NHibernate Validator 执行其操作时会发生错误。

更新我尝试单步执行 NH 验证器代码,似乎在某些时候它正在尝试验证实体的 Castle 代理,而不是基础实体本身。这会导致麻烦。不知道该怎么办...

更新如果我使用 LinFu ProxyFactoryFactory,而不是 Castle,问题就会消失。不幸的是,LinFu 给我带来了其他问题,所以我不想使用它。

4

1 回答 1

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

于 2011-11-10T21:30:53.807 回答