Свободное владение столбцами NHibernate и XML

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

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

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


person roufamatic    schedule 15.09.2010    source источник


Ответы (2)


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

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

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

person Diego Mijelshon    schedule 16.09.2010

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

person Halvard    schedule 06.02.2013