Ok, I found the following code over at http://gist.github.com/47082 :

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Text;
using System.Xml;
using NHibernate.SqlTypes;
using NHibernate.UserTypes;

namespace NHibernate.Custom
{
public class XmlType : IUserType
{
   public new bool Equals(object x, object y)
   {
       if (x == null || y == null)
           return false;

       var xdoc_x = (XmlDocument) x;
       var xdoc_y = (XmlDocument) y;
       return xdoc_y.OuterXml == xdoc_x.OuterXml;
   }

   public int GetHashCode(object x)
   {
       return x.GetHashCode();
   }


   public object NullSafeGet(IDataReader rs, string[] names, object owner)
   {
       if (names.Length != 1)
           throw new InvalidOperationException("names array has more than
one element. can't handle this!");

       var document = new XmlDocument();

       var val = rs[names[0]] as string;

       if (val != null)
       {
           document.LoadXml(val);
           return document;
       }

       return null;
   }

   public void NullSafeSet(IDbCommand cmd, object value, int index)
   {
       var parameter = (DbParameter )cmd.Parameters[index];

       if(value == null)
       {
           parameter.Value = DBNull.Value;
           return;
       }

       parameter.Value = ((XmlDocument) value).OuterXml;
   }

   public object DeepCopy(object value)
   {

       var toCopy = value as XmlDocument;

       if(toCopy==null)
           return null;

       var copy = new XmlDocument();
       copy.LoadXml(toCopy.OuterXml);
       return copy;
   }

   public object Replace(object original, object target, object owner)
   {
       throw new NotImplementedException();
   }

   public object Assemble(object cached, object owner)
   {
       var str = cached as string;
       if (str != null)
       {
           var doc = new XmlDocument();
           doc.LoadXml(str);
           return doc;
       }
       else
       {
           return null;
       }

   }

   public object Disassemble(object value)
   {
       var val = value as XmlDocument;
       if(val != null)
       {
           return val.OuterXml;
       }
       else
       {
           return null;
       }
   }

   public SqlType[] SqlTypes
   {
       get
       {
           return new SqlType[] { new SqlXmlStringType() };
       }
   }

   public Type ReturnedType
   {
       get { return typeof(XmlDocument); }
   }

   public bool IsMutable
   {
       get { return true; }
   }
}

public class SqlXmlType : SqlType
{
   public SqlXmlType() : base(DbType.Xml)
   {
   }
}

public class SqlXmlStringType : SqlType
{
   public SqlXmlStringType()
       : base(DbType.String, 4000)
   {
   }
}

}

2009/7/30 Mikael Henriksson <[email protected]>
>
> Excuse me for being a n00b but that didn't help me much. So I need to
create my own IUserType/IProperty for now? I have tried searching for this
on both google and bing but I haven't had any luck yet. Any help
appreciated!
>
>
> 2009/7/29 Fabio Maulo <[email protected]>
>>
>> http://nhjira.koah.net/browse/NH-866
>>
>> 2009/7/29 Mikael Henriksson <[email protected]>
>>>
>>> Hi,
>>>
>>> Is it possible to map the sql db type Xml to a property of type
XDocument/XmlDocument? If it's not supported by default how do I work around
it?
>>>
>>>
>>
>>
>>
>> --
>> Fabio Maulo
>>
>> >>
>

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to