我從頭開始構建一個新網站,並且正在考慮對我的ORM使用流利NHibernate。我認爲它可以輕鬆處理所有事情,除了可能的話,我的XML列。我從來沒有用NHibernate建立網站(儘管我已經使用Hibernate for Java),所以我認爲我是n00b。Fluent NHibernate和XML專欄
理想情況下,我希望XML可以像Linq-to-SQL一樣作爲XElement對待。
我可以用(流利的)NHibernate來做到這一點嗎?如果我想使用自動映射怎麼辦?
我從頭開始構建一個新網站,並且正在考慮對我的ORM使用流利NHibernate。我認爲它可以輕鬆處理所有事情,除了可能的話,我的XML列。我從來沒有用NHibernate建立網站(儘管我已經使用Hibernate for Java),所以我認爲我是n00b。Fluent NHibernate和XML專欄
理想情況下,我希望XML可以像Linq-to-SQL一樣作爲XElement對待。
我可以用(流利的)NHibernate來做到這一點嗎?如果我想使用自動映射怎麼辦?
您可以使用這裏定義的IUserType:它使用XmlDocument的https://nhibernate.jira.com/secure/attachment/12905/XmlType.cs
,但你可以很容易地修改它與工作的XElement代替。
更新:這已包含在NHibernate 3中。XmlDocument和XDocument都可用。
由於我努力尋找解決方案,我想在這裏分享我的解決方案(使用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列。