Found this as a patch for Oracle. I'll try to copy the behavior to MS SQL
2005. Not sure about Jira but I probably should add this as a patch or
whatever when it is done? Anyone interested?

case DbType.Xml:
    //prepare OracleXmlType in ODP.NET
    sqlType = SqlTypeFactory.GetString(0);
    base.InitializeParameter(dbParam, name, sqlType);

    //not make sure to override the OracleDbType
    global::System.Type oracleDbTypeEnumType =
global::System.Type.GetType("Oracle.DataAccess.Client.OracleDbType,
Oracle.DataAccess");
    dbParam.GetType().GetProperty("OracleDbType").SetValue(dbParam,
oracleDbTypeEnumType.GetField("XmlType").GetValue(oracleDbTypeEnumType),
null);
    break;


2009/7/31 Mikael Henriksson <[email protected]>

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

Reply via email to