一般情况下,想要用 NHibernate 来映射数据库,需要 Calss 和*.hbm.xml 相结合来用。
NHibernate.Mapping.Attribute 可以自动映射,这样就不需要再手动去写*.hbm.xml 了。
但是,Spring.NET 默认情况下,只支持第一种方法。这让我这个不喜欢写 xml 的人非常郁
闷。于是上网找了大量资料,最后终于找到方法。
自定义一个类,让它继承 Spring.Data.NHibernate.LocalSessionFactoryObject
public class MyLocalSessionFactoryObject : LocalSessionFactoryObject
{
/// <summary>
/// 实体类所在的程序集的名称
/// </summary>
public string[] ModelAssemblyName { get; set; }
protected override void PostProcessConfiguration(Configuration config)
{
base.PostProcessConfiguration(config);
MemoryStream stream = new MemoryStream();
HbmSerializer.Default.Validate = true;
foreach (string modelAssemblyName in ModelAssemblyName)
{
Assembly assembly = Assembly.Load(modelAssemblyName);
HbmSerializer.Default.Serialize(stream, assembly);
stream.Position = 0;
config.AddInputStream(stream);
}
}
}
再修改一下 Spring.NET 的配置文件
<!-- NHibernate配置 开始 -->
<object id="NHibernateSessionFactory" type="XXX.MyDao.LocalSessionFactory, Order.Spring.Dao">
<property name="DbProvider" ref="DbProvider"/>
<property name="ModelAssemblyName">
<list>
<value>Order.Model</value>
</list>
</property>
<property name="HibernateProperties">
// ....
</property>
</object>
大功成!
评论11