当前位置:  开发笔记 > 编程语言 > 正文

NHibernate.MappingException:没有持久性:XYZ

如何解决《NHibernate.MappingException:没有持久性:XYZ》经验,为你挑选了5个好方法。

现在,在你说之前:我做了 Google,我的hbm.xml文件嵌入式资源.

这是我要调用的代码:

ISession session = GetCurrentSession();
var returnObject =  session.Get(Id);

这是我的类的映射文件:



  
    
      
    

    
    
    

    
      
      
    

    
      
      
    

  

有没有人遇到过这个问题?

这是完整的错误消息:

MappingException: No persister for:  HQData.Objects.SubCategory]NHibernate.Impl.SessionFactoryImpl.GetEntityPersister(String entityName, Boolean throwIfNotFound)
 in c:\CSharp\NH2.0.0\nhibernate\src\NHibernate\Impl\SessionFactoryImpl.cs:766 NHibernate.Impl.SessionFactoryImpl.GetEntityPersister(String entityName)
 in c:\CSharp\NH2.0.0\nhibernate\src\NHibernate\Impl\SessionFactoryImpl.cs:752 NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent event, LoadType loadType)
 in c:\CSharp\NH2.0.0\nhibernate\src\NHibernate\Event\Default\DefaultLoadEventListener.cs:37 NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType loadType)
 in c:\CSharp\NH2.0.0\nhibernate\src\NHibernate\Impl\SessionImpl.cs:2054 NHibernate.Impl.SessionImpl.Get(String entityName, Object id)
 in c:\CSharp\NH2.0.0\nhibernate\src\NHibernate\Impl\SessionImpl.cs:1029 NHibernate.Impl.SessionImpl.Get(Type entityClass, Object id)
 in c:\CSharp\NH2.0.0\nhibernate\src\NHibernate\Impl\SessionImpl.cs:1020 NHibernate.Impl.SessionImpl.Get(Object id)
 in c:\CSharp\NH2.0.0\nhibernate\src\NHibernate\Impl\SessionImpl.cs:985 HQData.DataAccessUtils.NHibernateObjectHelper.LoadDataObject(Int32 Id)
 in C:\Development\HQChannelRepo\HQ Channel Application\HQChannel\HQData\DataAccessUtils\NHibernateObjectHelper.cs:42 HQWebsite.LocalSearch.get_subCategory()
 in C:\Development\HQChannelRepo\HQ Channel Application\HQChannel\HQWebsite\LocalSearch.aspx.cs:17 HQWebsite.LocalSearch.Page_Load(Object sender, EventArgs e)
 in C:\Development\HQChannelRepo\HQ Channel Application\HQChannel\HQWebsite\LocalSearch.aspx.cs:27 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33 System.Web.UI.Control.OnLoad(EventArgs e) +99 System.Web.UI.Control.LoadRecursive() +47 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436

更新,这里就是为解决我的情况是:我已经改变了一些代码,我在运行时没有加入大会的配置文件.



1> Andy S..:

听起来好像忘了将映射程序集添加到会话工厂配置中.

如果您正在使用app.config ...

.
.
    true
    true 1, false 0, yes 'Y', no 'N'
      

.
.


如何在Fluent NHibernate中执行此操作,我正在开发一个serperate项目中的模式,所以我无法访问用户程序集?

2> Chris Vosnid..:

显而易见的东西,但对NHibernate新手来说非常有用.

应将所有XML映射文件视为嵌入式资源,而不是默认内容.通过编辑文件属性中的"构建操作"属性来设置此选项.

然后将XML文件嵌入到程序集中,并在NHibernate的配置阶段在项目启动时进行解析.



3> 小智..:

我的问题是我忘了将.hbm放在映射xml的名称中.还要确保将其作为嵌入式资源!



4> basarat..:

我从这里得到了这个:

在我的情况下,映射类不公开.换句话说,而不是:

public class UserMap : ClassMap  // note the public!

我刚才:

class UserMap : ClassMap


如果您使用的是Fluent,我会说这是更常见的原因。谢谢,这很容易错过。

5> Nickmaovich..:

google搜索stackoverflowing上花了大约4个小时,尝试了那里的所有东西,我发现了我的错误:

我的映射文件名为.nbm.xml,除了.hbm.xml.那太疯狂了.


唉,只是做了同样的事情,除了我有.xml而不是.hbm.xml.也许错误中应该有一些提示:)
哈哈,我第一次听到"stackoverflowing"的表达
我的天啊.我不敢相信我这样做了.我在映射文件中搜索错误数小时,结果发现我在文件名中输了一个错误... doh.谢谢!如果我没有偶然发现这一点,我会想我多长时间都会撕裂我的头发.
推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有