MappingException:没有持久性 – NHibernate – 持久化适配器
好吧,我google了很多,并在那里找到了相同的建议(将hbm设置为嵌入式资源,在hibernate.cfg中添加hbm等等),尽管如此,我仍然没有得到它。
让我解释一下:我为检票口设备写了一个Communication 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映射文件:
保存方法:
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,其中包含“TGPass.Model.DeviceConf没有持久性”…
我做错了什么?
先感谢您。
仅仅为了完整性(也基于我的痛苦经历) ,这个例外主要有三个原因:
- xml映射文件不是
Embedded Resource
- xml文件不是.dll的一部分,它被配置为映射源
(参见
配置) - xml文件没有默认后缀
.hbm.xml
其中一个通常是: MappingException:没有持久性的罪魁祸首…