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