代码之家  ›  专栏  ›  技术社区  ›  roufamatic RichardJohnn

Fluent NHibernate和XML列

  •  4
  • roufamatic RichardJohnn  · 技术社区  · 15 年前

    我正在从头开始建立一个新网站,并考虑使用Fluent NHibernate作为我的ORM。我认为它可以很容易地处理所有事情,可能除了我的XML列。我从来没有用NHibernate构建过一个站点(尽管我使用了Hibernate for Java),所以把我当成n00b吧。

    理想情况下,我希望XML像LINQtoSQL一样被视为一个XElement。

    我能用(流利的)NHibernate做这个吗?如果我想使用自动映射呢?

    2 回复  |  直到 15 年前
        1
  •  6
  •   Daniel Schilling Aaron Palmer    12 年前

    您可以使用此处定义的IUserType: https://nhibernate.jira.com/secure/attachment/12905/XmlType.cs

    它使用XmlDocument,但是您可以很容易地修改它以使用XElement。

    更新: 这已包含在NHibernate 3中。XmlDocument和XDocument都可用。

        2
  •  2
  •   Halvard    13 年前

    因为我一直在努力寻找解决方案,所以我想在这里分享我的解决方案(使用XDocument而不是XElement,但至少对XML列有效)。

    首先制定本公约;

    using System.Xml.Linq;
    using FluentNHibernate.Conventions;
    using FluentNHibernate.Conventions.AcceptanceCriteria;
    using FluentNHibernate.Conventions.Inspections;
    using FluentNHibernate.Conventions.Instances;
    
    public class XmlTypeConvention : IUserTypeConvention
    {
        public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
        {
            criteria.Expect(x => x.Type == typeof(XDocument));
        }
    
        public void Apply(IPropertyInstance instance)
        {
            instance.CustomType<NHibernate.Type.XDocType>();
        }
    } 
    

    然后记得加上约定;

    Conventions.Add<XmlTypeConvention>();