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"…

我哪里做错了?

提前感谢。

MappingException: No persister for NHibernate持久化适配器

只是为了完整(也是基于我的痛苦经历),这个异常主要有三个原因:

  1. xml映射文件不被标记为 Embedded Resource
  2. xml文件不是配置为映射源<mapping assembly="MyProject.Data" /> (参见<session-factory>配置)
  3. .dll的一部分。
  4. xml文件没有默认后缀 .hbm.xml
MappingException: No persister for…