NHibernate and XML Column Type

这是Ayende RahienNHibernate所做的一个扩展,让NHibernate可以保存XML类型的数据到数据库中,这在某些情况下非常有用。可以把XML转换为XmlDocument保存,也可以直接把对象序列化成XML保存到数据库中。看一下简单的使用过程:

业务实体类

public class Document
{
    
int id;

    
string author;

    XmlDocument xml;


    
public Document(string author, XmlDocument xml)
    
{
        
this.author = author;

        
this.xml = xml;
    }


    
public Document()
    
{

    }


    
public int Id
    
{
        
get return id; }

        
set { id = value; }
    }


    
public string Author
    
{
        
get return author; }

        
set { author = value; }
    }


    
public XmlDocument Xml
    
{
        
get return xml; }

        
set { xml = value; }
    }

}

映射文件,注意xml属性的类型,下载的代码中有XmlType的实现。

<?xml version='1.0' encoding='utf-8'?>

<hibernate-mapping

     
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'

     
xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns='urn:nhibernate-mapping-2.0'>

  
<class name='NHibernate.Xml.Document,eXmlDataType2003' table='Documents'>

    
<id name='Id'>

      
<generator class='identity'/>

    
</id>

    
<property name='Author'/>

    
<property name='Xml' column='xml' type='NHibernate.Xml.XmlType, XmlDataType2003' />

  
</class>

</hibernate-mapping>

客户程序使用

public class Program
{
    
static void Main(string[] args)

    
{
        Configuration cfg 
= new Configuration();

        cfg.AddAssembly(
typeof (Document).Assembly);

        ISessionFactory factory 
= cfg.BuildSessionFactory();

        
using(ISession session = factory.OpenSession())

        
{
            XmlDocument xml 
= new XmlDocument();

            xml.Load(
"c:\\temp\\Municipalities.xml");

            Document doc1 
= new Document("Author1",xml);

            session.Save(doc1);

            session.Flush();


            Document document 
= session.Load(typeof (Document),1as Document;

           Console.WriteLine(document.Xml.OuterXml);

            Console.ReadLine();

           session.Flush();

        }


    }

}
数据库中的结果

 

最后把所有的感谢都给Ayende Rahien仁兄吧。

完整源码下载

.NET1.1版本:/Files/Terrylee/NHibernate.Xml-Sample2003.zip[Mircea Jivoin提供]

.NET2.0版本:/Files/Terrylee/NHibernate.Xml-Sample2005.zip[Ayende Rahien提供]

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2006-06-27 12:23 TerryLee 阅读(2422) 评论(5)  编辑 收藏 网摘 所属分类: [11]  数据持久

  回复  引用  查看    
#1楼 2006-06-27 13:01 | 阿不      
又开始研究起NHibernate?
  回复  引用  查看    
#2楼 [楼主]2006-06-27 13:13 | TerryLee      
@阿不
呵呵,没有

看到了觉得挺有用,就试了一下:-)
  回复  引用  查看    
#3楼 2006-06-27 14:00 | kid_li      
SqlServer2000中存储xml文件的字段是不是以字符串的格式存储的?SqlServer2005中有xml这种数据类型。
  回复  引用  查看    
#4楼 [楼主]2006-06-27 14:02 | TerryLee      
@kid_li
嗯,2000中是以字符串的形式存储的。
  回复  引用    
#5楼 2006-09-29 17:05 | codelover [未注册用户]
.net开源框架qq群30017484,Castle ActiveRecord、Nhibernate、ibatisnet、IOC容器Spring.Net和Castle、等框架讨论,欢迎加入,共同进步




标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-08-15 08:01 编辑过
Google站内搜索

相关文章:

相关链接: