Method 'ISessionImplementorProxy.List_callback' does not have a method body
Description
Environment
Attachments
Activity
I guess this is related to NH Core and not to NH Envers? Right?
Hi,
I just stumbled upon this issue while upgrading a project to NHibernare 3.4.1 (and 4.1.0).
After debugging a few hours, I found the issue to be here: https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate/Proxy/DynamicProxy/DefaultMethodEmitter.cs#L85
Inside 'EmitMethodBody' method, there is this code:
// Push arguments for InvocationInfo constructor.
IL.Emit(OpCodes.Ldarg_0); // 'this' pointer
PushTargetMethodInfo(IL, proxyMethod, method);
PushTargetMethodInfo(IL, callbackMethod, callbackMethod);
PushStackTrace(IL);
PushGenericArguments(method, IL);
_argumentHandler.PushArguments(parameters, IL, false);
It looks like the second call to PushTargetMethodInfo, should instead read like:
PushTargetMethodInfo(IL, callbackMethod, method);
Somehow this typo did pass on MS.NET, but mono is a bit more strict and the generated code ends up referring to a non-yet-existing method.
<<Does it mean you know how to fix the fluent config?>>
No. IIRC (no time to "source code looking" ATM) there is some reflection calls there that might cause your issues .
<<The reason I'm asking is because I'm trying to keep my domain models attribute-free>>
I totally understand . That's the reason the API was created in the first place (compared to Hibernate Envers)
<<Do you have any suspections? Things to check/compare?>>
Sorry, no. If I find the time, I can have a look later. The problem is that mono to me is just a black hole - close to zero knowledge in that area.
Ok, I'll try to dig into the source to compare the calls.
Do you have any suspections? Things to check/compare?
Ok, switched to attribute config and it works. Thank you!
Does it mean you know how to fix the fluent config?
The reason I'm asking is because I'm trying to keep my domain models attribute-free (i.e. persistance-layer-dependency free)
I have this piece of code
{{Session.Auditer()
.GetRevisions(typeof (DomainModel.Order), request.Id)
.Reverse();}}
which works fine on .NET, but fails on mono.
I'll provide domain model + mappings or even some simple demo in a comment.
Stack trace:
{{System.InvalidOperationException: Method 'ISessionImplementorProxy.List_callback' does not have a method body.
at System.Reflection.Emit.MethodBuilder.fixup () [0x00000] in <filename unknown>:0
at System.Reflection.Emit.TypeBuilder.CreateTypeInfo () [0x00000] in <filename unknown>:0
at System.Reflection.Emit.TypeBuilder.CreateType () [0x00000] in <filename unknown>:0
at NHibernate.Proxy.DynamicProxy.ProxyFactory.CreateUncachedProxyType (System.Type baseType, System.Type[] baseInterfaces) [0x00000] in <filename unknown>:0
at NHibernate.Proxy.DynamicProxy.ProxyFactory.CreateProxyType (System.Type baseType, System.Type[] interfaces) [0x00000] in <filename unknown>:0
at NHibernate.Proxy.DynamicProxy.ProxyFactory.CreateProxy (System.Type instanceType, IInterceptor interceptor, System.Type[] baseInterfaces) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Entities.Mapper.Relation.Lazy.Proxy.DefaultEnversProxyFactory.CreateToOneProxy (NHibernate.Envers.Configuration.AuditConfiguration verCfg, IAuditReaderImplementor versionsReader, System.String referencedEntityName, System.Object entityId, Int64 revision, Boolean removed) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Entities.Mapper.Relation.ToOneIdMapper.NullSafeMapToEntityFromMap (NHibernate.Envers.Configuration.AuditConfiguration verCfg, System.Object obj, IDictionary data, System.Object primaryKey, IAuditReaderImplementor versionsReader, Int64 revision) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Entities.Mapper.Relation.AbstractToOneMapper.MapToEntityFromMap (NHibernate.Envers.Configuration.AuditConfiguration verCfg, System.Object obj, IDictionary data, System.Object primaryKey, IAuditReaderImplementor versionsReader, Int64 revision) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Entities.Mapper.MultiPropertyMapper.MapToEntityFromMap (NHibernate.Envers.Configuration.AuditConfiguration verCfg, System.Object obj, IDictionary data, System.Object primaryKey, IAuditReaderImplementor versionsReader, Int64 revision) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Entities.EntityInstantiator.CreateInstanceFromVersionsEntity (System.String entityName, IDictionary versionsEntity, Int64 revision) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Entities.EntityInstantiator.AddInstancesFromVersionsEntities (System.String entityName, IList addTo, IEnumerable`1 versionsEntities, Int64 revision) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Query.Impl.EntitiesAtRevisionQuery.FillResult (IList result) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Query.Impl.AbstractAuditQuery.GetSingleResult () [0x00000] in <filename unknown>:0
at NHibernate.Envers.Reader.AuditReader.Find (System.String entityName, System.Object primaryKey, Int64 revision, Boolean includeDeletions) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Reader.AuditReader.Find (System.String entityName, System.Object primaryKey, Int64 revision) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Reader.AuditReader.Find (System.Type cls, System.Object primaryKey, Int64 revision) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Reader.AuditReader.Find[Order] (System.Object primaryKey, Int64 revision) [0x00000] in <filename unknown>:0
at CRM.Backend.ServiceInterface.OrderService.Get (CRM.Backend.ServiceModel.OrderHistoryRequest request) [0x00063] in /home/****/CRM.Backend/ServiceInterface/OrderService.cs:167 at System.Reflection.Emit.MethodBuilder.fixup () [0x00000] in <filename unknown>:0
at System.Reflection.Emit.TypeBuilder.CreateTypeInfo () [0x00000] in <filename unknown>:0
at System.Reflection.Emit.TypeBuilder.CreateType () [0x00000] in <filename unknown>:0
at NHibernate.Proxy.DynamicProxy.ProxyFactory.CreateUncachedProxyType (System.Type baseType, System.Type[] baseInterfaces) [0x00000] in <filename unknown>:0
at NHibernate.Proxy.DynamicProxy.ProxyFactory.CreateProxyType (System.Type baseType, System.Type[] interfaces) [0x00000] in <filename unknown>:0
at NHibernate.Proxy.DynamicProxy.ProxyFactory.CreateProxy (System.Type instanceType, IInterceptor interceptor, System.Type[] baseInterfaces) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Entities.Mapper.Relation.Lazy.Proxy.DefaultEnversProxyFactory.CreateToOneProxy (NHibernate.Envers.Configuration.AuditConfiguration verCfg, IAuditReaderImplementor versionsReader, System.String referencedEntityName, System.Object entityId, Int64 revision, Boolean removed) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Entities.Mapper.Relation.ToOneIdMapper.NullSafeMapToEntityFromMap (NHibernate.Envers.Configuration.AuditConfiguration verCfg, System.Object obj, IDictionary data, System.Object primaryKey, IAuditReaderImplementor versionsReader, Int64 revision) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Entities.Mapper.Relation.AbstractToOneMapper.MapToEntityFromMap (NHibernate.Envers.Configuration.AuditConfiguration verCfg, System.Object obj, IDictionary data, System.Object primaryKey, IAuditReaderImplementor versionsReader, Int64 revision) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Entities.Mapper.MultiPropertyMapper.MapToEntityFromMap (NHibernate.Envers.Configuration.AuditConfiguration verCfg, System.Object obj, IDictionary data, System.Object primaryKey, IAuditReaderImplementor versionsReader, Int64 revision) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Entities.EntityInstantiator.CreateInstanceFromVersionsEntity (System.String entityName, IDictionary versionsEntity, Int64 revision) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Entities.EntityInstantiator.AddInstancesFromVersionsEntities (System.String entityName, IList addTo, IEnumerable`1 versionsEntities, Int64 revision) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Query.Impl.EntitiesAtRevisionQuery.FillResult (IList result) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Query.Impl.AbstractAuditQuery.GetSingleResult () [0x00000] in <filename unknown>:0
at NHibernate.Envers.Reader.AuditReader.Find (System.String entityName, System.Object primaryKey, Int64 revision, Boolean includeDeletions) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Reader.AuditReader.Find (System.String entityName, System.Object primaryKey, Int64 revision) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Reader.AuditReader.Find (System.Type cls, System.Object primaryKey, Int64 revision) [0x00000] in <filename unknown>:0
at NHibernate.Envers.Reader.AuditReader.Find[Order] (System.Object primaryKey, Int64 revision) [0x00000] in <filename unknown>:0
at CRM.Backend.ServiceInterface.OrderService.Get (CRM.Backend.ServiceModel.OrderHistoryRequest request) [0x00063] in /home/****/CRM.Backend/ServiceInterface/OrderService.cs:167
}}