NHibernate: XML-Daten mappen

Schade, heute hätte ich es mal gebraucht: Eine Unterstützung für den XML-Datentyp von SQL Server 2005 in NHibernate oder die Möglichkeit, XML irgendwie nativ wegzuspeichern. Bekomme ich aber nicht, stattdessen nur die Fehlermeldung, dass der Mapper damit nix anfangen könne.

Ein kleiner Workaround ist mir allerdings geblieben:

  • Die Daten werden jetzt als NText gespeichert und in einer als protected gekennzeichneten Eigenschaft gehalten
  • Diese wird in NHibernate gemapped, während gleichzeitig eine als public gekennzeichnete Eigenschaft existiert, die aber nicht gemapped ist
  • Der Zugriff nach außen findet über eine Eigenschaft vom Typ XmlDocument statt, in die ich zur Laufzeit das geladene XML einlade bzw. aus der ich es mir beim Speichern hole
  • Zum Speichern wird auf [Öffentliche Eigenschaft].OuterXml zugegriffen
  • Beim Laden werden die Daten per LoadXML() ins XML-Dokument eingelesen

Der Code der Klasse sieht so aus:

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;

namespace CYTShops.Customers.Ebay
{
   ///

   /// Represents an exported item
   ///

   public class EbayExportedItem
   {

      private int _id;

      ///

      /// Id of the item
      ///

      public virtual int Id
      {
         get { return _id; }
         set { _id = value; }
      }

      private string _ebayId;

      ///

      /// Ebay-ID of the item
      ///

      public virtual string EbayId
      {
         get { return _ebayId; }
         set { _ebayId = value; }
      }

      ///

      /// Xml-Code of the itemn
      ///

      protected virtual string Xml
      {
         get { return XmlData.OuterXml; }
         set { XmlData.LoadXml(value); }
      }

      private XmlDocument _xmlNode = new XmlDocument();

      ///

      /// XmlNode for external access
      ///

      public virtual XmlDocument XmlData
      {
         get { return _xmlNode; }
         set { _xmlNode = value; }
      }

   }
}

Beim Mapping kann jetzt auf die für das Speichern nicht notwendige Eigenschaft XmlData verzichtet werden:

< ?xml version="1.0" encoding="utf-8" ?>
                   namespace=”CYTShops.Customers.Ebay”
                   assembly=”CYTShops.Customers.Ebay”>

  

     
     
        
     

     
     
           
     
           
  
  

Nicht schön, aber dafür selten.

No Comment

Comments are closed.