现在,在你说之前:我做了 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
更新,这里就是为解决我的情况是:我已经改变了一些代码,我在运行时没有加入大会的配置文件.
听起来好像忘了将映射程序集添加到会话工厂配置中.
如果您正在使用app.config ...
. .true true 1, false 0, yes 'Y', no 'N' . .
显而易见的东西,但对NHibernate新手来说非常有用.
应将所有XML映射文件视为嵌入式资源,而不是默认内容.通过编辑文件属性中的"构建操作"属性来设置此选项.
然后将XML文件嵌入到程序集中,并在NHibernate的配置阶段在项目启动时进行解析.
我的问题是我忘了将.hbm放在映射xml的名称中.还要确保将其作为嵌入式资源!
我从这里得到了这个:
在我的情况下,映射类不公开.换句话说,而不是:
public class UserMap : ClassMap// note the public!
我刚才:
class UserMap : ClassMap
在google搜索和stackoverflowing上花了大约4个小时,尝试了那里的所有东西,我发现了我的错误:
我的映射文件名为.nbm.xml,除了.hbm.xml.那太疯狂了.