MappingException: No persister for NHibernate持久化适配器
本文关键字:NHibernate 持久化 适配器 for persister No MappingException | 更新日期: 2023-09-27 18:17:45
嗯,我谷歌了很多,并发现相同的建议都在那里(设置hbm为嵌入式资源,在hibernate.cfg中添加hbm等),尽管如此,我仍然没有得到它。
让我解释一下:我为一个票门设备写了一个通信Dll,在那里我有一个配置模型类,我用它来通过TCP/IP配置该设备。但是现在,我必须在DB上持久化这个对象,所以我在模型中编写了一个适配器,它将一个对象粘合到另一个对象。这样,我的配置模型就有了一个适配器,它有一个ID、IncludedDate等等。让我们看看:
DeviceConf Model类:
public class DeviceConf : BaseModel // which have ID, IncludedDate, etc
{
private TGCommHelper.Entities.Configuration.TicketGateConfig _conf;
public TGCommHelper.Entities.Configuration.TicketGateConfig conf
{
get { return _conf; }
private set { _conf = value; }
}
public DeviceConf()
{
conf = new TGCommHelper.Entities.Configuration.TicketGateConfig();
}
public DeviceConf(TGCommHelper.Entities.Configuration.TicketGateConfig config){
conf = config;
}
public virtual string IP
{
get { return conf.IP; }
set { conf.IP = value; }
}
public virtual string MAC_ADDR
{
get { return conf.MAC_ADDR; }
set { conf.MAC_ADDR = value; }
}
//... and so on.
}
DeviceConf.hbm.xml映射文件
< hibernate-mapping assembly="TGPass.Model" namespace="TGPass.Model"
xmlns="urn:nhibernate-mapping-2.2">
< class name="DeviceConf" table="DeviceConfTbl">
< id name="ID" column="ID">
< generator class="identity" />
< /id>
< property name="IP">
< column name="IP" sql-type="varchar" not-null="true" />
< /property>
< property name="MAC_ADDR">
< column name="MAC_ADDR" sql-type="varchar" not-null="true" />
< /property>
< !-- and so on -->
< /class>
< /hibernate-mapping>
保存方法:
public virtual void Create(T saveObj)
{
using (var session = GetSession())
{
using (var trans = session.BeginTransaction())
{
try
{
session.Save(saveObj);
trans.Commit();
}
catch (Exception e)
{
throw e;
}
}
}
}
使用我这里的另一个模型类,所有的事情都工作得很好,但不是这个。每次我尝试用Create方法保存这个,NHibernate都会抛出一个MappingException: "No persister for TGPass.Model.DeviceConf"…
我哪里做错了?
提前感谢。
只是为了完整(也是基于我的痛苦经历),这个异常主要有三个原因:
- xml映射文件不被标记为
Embedded Resource
- xml文件不是配置为映射源
<mapping assembly="MyProject.Data" />
(参见<session-factory>
配置) 的.dll的一部分。 - xml文件没有默认后缀
.hbm.xml