Свободные столбцы NHibernate и XML - PullRequest
4 голосов
/ 16 сентября 2010

Я создаю новый сайт с нуля и собираюсь использовать Fluent NHibernate для своей ORM.Я думаю, что все будет легко, за исключением, возможно, моих XML-столбцов.Я никогда не создавал сайт с NHibernate вообще (хотя я использовал Hibernate для Java), поэтому считайте меня n00b.

В идеале я хотел бы, чтобы XML рассматривался как XElement как Linq-to-SQL делает.

Могу ли я сделать это с (свободно) NHibernate?Что если я хочу использовать автоматическое сопоставление?

Ответы [ 2 ]

6 голосов
/ 16 сентября 2010

Вы можете использовать IUserType, определенный здесь: https://nhibernate.jira.com/secure/attachment/12905/XmlType.cs

Он использует XmlDocument, но вы можете легко изменить его для работы с XElement.

Обновление: Это было включено в NHibernate 3. Доступны как XmlDocument, так и XDocument.

2 голосов
/ 06 февраля 2013

Поскольку я изо всех сил пытался найти решение, я хотел бы поделиться своим решением здесь (с 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 в базе данных.

...