What you need is a data contract serializer to push data across the
pipe (the example below is only for outgoing). If it see's an
uninitialized proxy, it will skip serialization on it.
using System;
using System.CodeDom;
using System.Reflection;
using System.Runtime.Serialization;
using System.Collections.ObjectModel;
using log4net;
using NHibernate.Proxy;
namespace MyNamespace.ServiceModel {
public class NhDataContractSurrogate : IDataContractSurrogate {
private static readonly ILog log = LogManager.GetLogger(typeof
(NhDataContractSurrogate));
#region IDataContractSurrogate Members
public object GetObjectToSerialize(object obj, Type
targetType) {
log.Debug("Checking object");
var proxy = obj as INHibernateProxy;
if (proxy != null) {
log.Debug("Hibernate proxy found");
var li = proxy.HibernateLazyInitializer;
if (li.IsUninitialized) {
log.Debug("Hibernate proxy is not initialized and
will not be serialized");
obj = null;
}
else {
obj = li.GetImplementation();
log.DebugFormat(
"Hibernate proxy was initialized and has been
casted to its implementation of type '{0}'",
obj.GetType().FullName
);
}
}
return obj;
}
public object GetCustomDataToExport(Type clrType, Type
dataContractType) {
return null;
}
public object GetCustomDataToExport(MemberInfo memberInfo,
Type dataContractType) {
return null;
}
public Type GetDataContractType(Type type) {
return type;
}
public object GetDeserializedObject(object obj, Type
targetType) {
return obj;
}
public void GetKnownCustomDataTypes(Collection<Type>
customDataTypes) {
}
public Type GetReferencedTypeOnImport(string typeName, string
typeNamespace, object customData) {
return null;
}
public CodeTypeDeclaration ProcessImportedType
(CodeTypeDeclaration typeDeclaration, CodeCompileUnit compileUnit) {
return typeDeclaration;
}
#endregion
}
}
On Feb 2, 5:37 am, Peter Derwa <[email protected]> wrote:
> Hey,
>
> I've downloaded the new version of NHibernate and I found some
> comments about the possibilities to create your own custom lazy loader
> for the new NHibernate version.
> Now that looks great!!! we are using a WCF Service so we are currently
> working with lazy = false, and that kinda sucks big time, because when
> loading a complete table with lots of relations, that will consume
> quite allot of time.
>
> Could someone point me into a right direction of how to do that? I was
> not able to find the right article yet.
> One note to keep in mind, we have multiple projects aka databases, so
> in my lazy loading customization i'll have to be able to add that
> project ID to create a session to the right database!
>
> grt
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en.