I tried adding DbType.Xml to the 2005 Dialect but the build messed up
something or fluent nhibernate didn't like the rebuild.
What other steps are there besides RegisterColumnType(DbType.Xml, "XML"); ?
I modified the previous code to return new SqlType[] { new SqlXmlType() };
Anything else I have to do?
2009/7/31 Mikael Henriksson <[email protected]>
> Never mind, it is interface based. I've done too much coding today Zzzz
>
> 2009/7/31 Mikael Henriksson <[email protected]>
>
> Do I need to update NHibernate and recompile it or can I load it
>> dynamically?
>>
>>
>> 2009/7/30 Mikael Henriksson <[email protected]>
>>
>>> 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
-~----------~----~----~----~------~----~------~--~---