This looks interesting. Any chance of it getting committed to the trunk?
Regards,
Johannes

On Sun, Sep 20, 2009 at 1:19 AM, Mikael Henriksson <[email protected]>wrote:

> I recommend you have a look at my blog post :
> http://blog.zoolutions.se/post/2009/08/13/How-to-store-XmlDocument-as-Xml-in-Sql-Server-2005-using-NHibernate.aspx
> <http://blog.zoolutions.se/post/2009/08/13/How-to-store-XmlDocument-as-Xml-in-Sql-Server-2005-using-NHibernate.aspx>and
> download the patch I created : http://nhjira.koah.net/browse/NH-866
>
> problem is that NHibernate does not support SqlDbType.Xml out of the box so
> you need to download the source code and apply the patch. Then you can
> either use your own or my XmlUserType
>
>
> On Thu, Sep 3, 2009 at 12:20 PM, csetzkorn <[email protected]> wrote:
>
>>
>> I have made a start.
>>
>> Mapping:
>>
>> <class name="X" ...
>>
>>    <property name="XML" column="XML">
>>      <type name="a.b.XmlType, a"></type>
>>    </property>
>>
>> </class>
>>
>> Code of XmlType below (cobbled together from the Internet). Problem:
>>
>> var cfg = new Configuration();
>> cfg..Configure();
>> cfg.AddAssembly("Diseases");
>> new SchemaUpdate(cfg).Execute(false, true);
>>
>> This works for all other classes (tables appear in db) but not for
>> this class (X). There is no exception as well.
>>
>> Looking forward to any feedback. Thanks.
>>
>> XmlType code:
>>
>> 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 a.b
>> {
>>    public class XmlType : IUserType
>>    {
>>        public new bool Equals(object x, object y)
>>        {
>>            XmlDocument xdoc_x = (XmlDocument) x;
>>            XmlDocument xdoc_y = (XmlDocument) y;
>>            return xdoc_y.OuterXml == xdoc_x.OuterXml;
>>        }
>>
>>        public object Disassemble(object value)
>>        {
>>            throw new Exception("The method or operation is not
>> implemented.");
>>        }
>>
>>        public int GetHashCode(object x)
>>        {
>>            throw new Exception("The method or operation is not
>> implemented.");
>>        }
>>
>>        public object Replace(object original, object target, object
>> owner)
>>        {
>>            return original;
>>        }
>>
>>        public object Assemble(object cached, object owner)
>>        {
>>            throw new Exception("The method or operation is not
>> implemented.");
>>        }
>>
>>        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!");
>>            XmlDocument document = new XmlDocument();
>>            string 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)
>>        {
>>            DbParameter parameter = (DbParameter )cmd.Parameters
>> [index];
>>            if(value == null)
>>            {
>>                parameter.Value = DBNull.Value;
>>                return;
>>            }
>>            parameter.Value = ((XmlDocument) value).OuterXml;
>>        }
>>
>>        public object DeepCopy(object value)
>>        {
>>            XmlDocument other = (XmlDocument) value;
>>            XmlDocument xdoc = new XmlDocument();
>>            xdoc.LoadXml(other.OuterXml);
>>            return xdoc;
>>        }
>>
>>        public SqlType[] SqlTypes
>>        {
>>            get
>>            {
>>                return new SqlType[] { new SqlXmlType() };
>>            }
>>        }
>>
>>        public System.Type ReturnedType
>>        {
>>            get { return typeof(XmlDocument); }
>>        }
>>
>>        public bool IsMutable
>>        {
>>            get { return true; }
>>        }
>>    }
>>
>>    public class SqlXmlType : SqlType
>>    {
>>        public SqlXmlType() : base(System.Data.DbType.Xml)
>>        {
>>         }
>>    }
>> }
>>
>>
>> On Sep 3, 9:14 am, csetzkorn <[email protected]> wrote:
>> > Hi,
>> >
>> > I have a class with a XmlDocument attribute (or XElement I do not
>> > care) which I would like to map to a column of the XML data type in
>> > SQL server 2005. I have done some googeling but did not get anywhere
>> > with the suggested solutions. Is anyone aware of a working/easy
>> > solution to my problem? Thanks a lot in advance.
>> >
>> > Best wishes,
>> >
>> > Christian
>>
>>
>
> >
>

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