【问题标题】:Fluent NHibernate and XML columnsFluent NHibernate 和 XML 列
【发布时间】:2010-09-15 20:23:56
【问题描述】:

我正在从头开始构建一个新站点,并且正在考虑将 Fluent NHibernate 用于我的 ORM。我认为它可以轻松处理所有事情,可能除了我的 XML 列。我从来没有用 NHibernate 建立过网站(虽然我用过 Hibernate for Java)所以把我当成 n00b。

理想情况下,我希望 XML 像 Linq-to-SQL 那样被视为 XElement。

我可以用(流利的)NHibernate 做到这一点吗?如果我想使用自动映射怎么办?

【问题讨论】:

    标签: xml nhibernate fluent-nhibernate xelement


    【解决方案1】:

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

    它使用 XmlDocument,但您可以轻松修改它以使用 XElement。

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

    【讨论】:

      【解决方案2】:

      由于我努力寻找解决方案,我想在这里分享我的解决方案(使用 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>();
      

      现在,如果您的域实体具有 XDocument 属性,它将变成数据库中的 XML 列。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-07
        • 2010-11-29
        • 2011-04-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多