大鹏一日同风起,扶摇直上九万里。这篇文章主要讲述NHibernate.MappingException:没有持久性:XYZ相关的知识,希望能为你提供帮助。
现在,在你说之前:我做谷歌,我的hbm.xml
文件是嵌入式资源。
这是我要调用的代码:
ISession session = GetCurrentSession();
var returnObject =session.Get<
T>
(Id);
这是我的类的映射文件:
<
?xml version="1.0" encoding="utf-8" ?>
<
hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<
class name="HQData.Objects.SubCategory, HQData" table="SubCategory" lazy="true">
<
id name="ID" column="ID" unsaved-value="https://www.songbingjia.com/android/0">
<
generator class="identity" />
<
/id>
<
property name="Name" column="Name" />
<
property name="NumberOfBuckets" column="NumberOfBuckets"/>
<
property name="SearchCriteriaOne" column="SearchCriteriaOne" />
<
bag name="_Businesses" cascade="all">
<
key column="SubCategoryId"/>
<
one-to-many
class="HQData.Objects.Business, HQData"/>
<
/bag>
<
bag name="_Buckets" cascade="all">
<
key column="SubCategoryId"/>
<
one-to-many
class="HQData.Objects.Bucket, HQData"/>
<
/bag>
<
/class>
<
/hibernate-mapping>
有没有人遇到过这个问题?
这是完整的错误消息:
更新,这是我的方案的解决方案:我已经更改了一些代码,我没有在运行时将Assembly添加到配置文件中。MappingException: No persister for:HQData.Objects.SubCategory]NHibernate.Impl.SessionFactoryImpl.GetEntityPersister(String entityName, Boolean throwIfNotFound) in c:CSharpNH2.0.0 hibernatesrcNHibernateImplSessionFactoryImpl.cs:766 NHibernate.Impl.SessionFactoryImpl.GetEntityPersister(String entityName) in c:CSharpNH2.0.0 hibernatesrcNHibernateImplSessionFactoryImpl.cs:752 NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent event, LoadType loadType) in c:CSharpNH2.0.0 hibernatesrcNHibernateEventDefaultDefaultLoadEventListener.cs:37 NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType loadType) in c:CSharpNH2.0.0 hibernatesrcNHibernateImplSessionImpl.cs:2054 NHibernate.Impl.SessionImpl.Get(String entityName, Object id) in c:CSharpNH2.0.0 hibernatesrcNHibernateImplSessionImpl.cs:1029 NHibernate.Impl.SessionImpl.Get(Type entityClass, Object id) in c:CSharpNH2.0.0 hibernatesrcNHibernateImplSessionImpl.cs:1020 NHibernate.Impl.SessionImpl.Get(Object id) in c:CSharpNH2.0.0 hibernatesrcNHibernateImplSessionImpl.cs:985 HQData.DataAccessUtils.NHibernateObjectHelper.LoadDataObject(Int32 Id) in C:DevelopmentHQChannelRepoHQ Channel ApplicationHQChannelHQDataDataAccessUtilsNHibernateObjectHelper.cs:42 HQWebsite.LocalSearch.get_subCategory() in C:DevelopmentHQChannelRepoHQ Channel ApplicationHQChannelHQWebsiteLocalSearch.aspx.cs:17 HQWebsite.LocalSearch.Page_Load(Object sender, EventArgs e) in C:DevelopmentHQChannelRepoHQ Channel ApplicationHQChannelHQWebsiteLocalSearch.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 ...
.
.
<
property name="show_sql">
true<
/property>
<
property name="query.substitutions">
true 1, false 0, yes 'Y', no 'N'<
/property>
<
mapping assembly="Project.DomainModel"/>
<
!-- Here -->
<
/session-factory>
.
.
另一答案我遇到了同样的问题,因为我在Configuration.AddAssembly()方法中添加了错误的程序集。
另一答案由于无效的映射配置,会发生此错误。您应该检查您为会话工厂设置的.Mappings的位置。基本上在项目中搜索“.Mappings”,并确保在下面的行中指定了正确的实体类。
.Mappings(m =>
m.FluentMappings.AddFromAssemblyOf<
YourEntityClassName>
())
另一答案如果从单独的程序集在存储库上运行测试,请确保将Hibernate.cfg.xml设置为始终在所述程序集的bin目录中输出。这不是我们发生的,我们在某些情况下得到了上述错误。
免责声明:这可能是一个稍微深奥的建议,因为它是我们构建存储库集成测试程序集的直接结果(即我们有一个从每个测试程序集到单个Hibernate.xfg.xml的符号链接)
另一答案不要忘记在.config文件中指定映射信息
EG
其中MyApp.Data是包含映射的程序集
另一答案在通过id查找对象时遇到类似问题...我所做的只是在类名中使用完全限定名。那是在它之前:
find("Class",id)
对象所以它变成这样:
find("assemblyName.Class",id)
另一答案确保已在Session上为您想要从DB获取的域对象调用
CreateCriteria(typeof(DomainObjectType))
方法。另一答案显而易见的东西,但对NHibernate新手来说非常有用。
应将所有XML映射文件视为嵌入式资源,而不是默认内容。通过编辑文件属性中的“构建操作”属性来设置此选项。
然后将XML文件嵌入到程序集中,并在NHibernate的配置阶段在项目启动时进行解析。
另一答案我的问题是我忘了将.hbm放在映射xml的名称中。还要确保将其作为嵌入式资源!
另一答案我从here得到了这个:
在我的情况下,映射类不公开。换句话说,而不是:
public class UserMap : ClassMap<
user>
// note the public!
我刚才:
class UserMap : ClassMap<
user>
另一答案在google搜索和stackoverflowing上花了大约4个小时,尝试了那里的所有东西,我发现了我的错误:
我的映射文件名为.nbm.xml而不是.hbm.xml。那太疯狂了。
另一答案我有类似的问题,我解决了如下:
我在MS SQL 2008上工作,但在NH配置中我的方言很差:NHibernate.Dialect.MsSql2005Dialect如果我更正它:NHibernate.Dialect.MsSql2008Dialect然后一切正常,没有例外“没有持久性:......”David 。
另一答案我在初始化期间也添加了错误的程序集。我坚持的类在程序集#1中,我的.hbm.xml文件嵌入在程序集#2中。我更改了
cfg.AddAssembly(...
以添加程序集#2(而不是程序集#1)并且一切正常。谢谢!另一答案要添加到Amol的答案,不要错误地指定Interface类类型。确保指定实现类。 (即不要使用IDomainObjectType)。不是我犯了这个错误...... :)
另一答案它应该是
name="Id"
吗?错别字是一个可能的原因。接下来将尝试使用非泛型测试来确保您传递正确的类型参数。
【NHibernate.MappingException(没有持久性:XYZ)】你能发布整个错误信息吗?
推荐阅读
- 为什么FetchKind不能使用Mapping.ByCode在NHibernate中工作
- 从app inventor中的google sheet调用用户名和密码
- 在Android Studio导入期间维护目录结构
- 如何在android中的日历上的特定日期设置点
- RecyclerView smoothScroll位于中心位置。安卓
- 在Android中创建用户可选择的字符串列表的最简单方法是什么()
- 使用回收视图时无法在Android模拟器中看到应用栏
- Android TV RecyclerView重点互动
- 如何解决无法识别应用的tf.app.run()错误()