来自表 Y 的关联引用了一个未映射的类:Y - C# NHibernate
Posted
技术标签:
【中文标题】来自表 Y 的关联引用了一个未映射的类:Y - C# NHibernate【英文标题】:An association from the table Y refers to an unmapped class: Y - C# NHibernate 【发布时间】:2012-04-26 05:14:13 【问题描述】:我遇到了异常:
"An association from the table order refers to an unmapped class: FrancosPoS.DBMapping.pastaCombo"
对于这个 NHibernate 映射:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="FrancosPoS" namespace="FrancosPoS.DBMapping" xmlns="urn:nhibernate-mapping-2.2">
<class name="order" table="order" lazy="true" >
<id name="idOrder">
<generator class="identity" />
</id>
<many-to-one insert="false" update="false" lazy="false" name="idPastaI" class="FrancosPoS.DBMapping.pastaIndividual">
<column name="idPastaI" sql-type="int(11)" not-null="false" />
</many-to-one>
<!--<property name="idPastaI">
<column name="idPastaI" sql-type="int(11)" not-null="false" />
</property>-->
<many-to-one insert="false" update="false" lazy="false" name="pastaCombo" class="FrancosPoS.DBMapping.pastaCombo">
<column name="idPastaC" sql-type="int(11)" not-null="false" />
</many-to-one>
<!--<property name="idPastaC">
<column name="idPastaC" sql-type="int(11)" not-null="false" />
</property>-->
<many-to-one insert="false" update="false" lazy="false" name="idPastaF" class="FrancosPoS.DBMapping.pastaFeast">
<column name="idPastaF" sql-type="int(11)" not-null="false" />
</many-to-one>
<!--<property name="idPastaF">
<column name="idPastaF" sql-type="int(11)" not-null="false" />
</property>-->
<many-to-one insert="false" update="false" lazy="false" name="idSalad" class="FrancosPoS.DBMapping.salad">
<column name="idSalad" sql-type="int(11)" not-null="false" />
</many-to-one>
<!--<property name="idSalad">
<column name="idSalad" sql-type="int(11)" not-null="false" />
</property>-->
<many-to-one insert="false" update="false" lazy="false" name="idDrink" class="FrancosPoS.DBMapping.drink">
<column name="idDrink" sql-type="int(11)" not-null="false" />
</many-to-one>
<!--<property name="idDrink">
<column name="idDrink" sql-type="int(11)" not-null="false" />
</property>-->
<property name="price">
<column name="price" sql-type="decimal(8,4)" not-null="true" />
</property>
<property name="cash">
<column name="cash" sql-type="tinyint(1)" not-null="false" />
</property>
<property name="credit">
<column name="credit" sql-type="tinyint(1)" not-null="false" />
</property>
<property name="obs">
<column name="obs" sql-type="varchar(150)" not-null="true" />
</property>
</class>
</hibernate-mapping>
这是我的cs课:
namespace FrancosPoS.DBMapping
public partial class order
public order()
public virtual int idOrder get; set;
public virtual pastaIndividual pastaIndividual get; set;
public virtual pastaCombo pastaCombo get; set;
public virtual pastaFeast pastaFeast get; set;
public virtual salad salad get; set;
public virtual drink drink get; set;
public virtual string price get; set;
public virtual System.Nullable<int> cash get; set;
public virtual System.Nullable<int> credit get; set;
public virtual string obs get; set;
pastaCombo 映射:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="FrancosPoS" namespace="FrancosPoS.DBMapping" xmlns="urn:nhibernate-mapping-2.2">
<class name="pastaCombo" table="pasta_combo" lazy="true" >
<id name="idPastaC">
<generator class="identity" />
</id>
<property name="type">
<column name="type" sql-type="varchar(25)" not-null="true" />
</property>
<property name="price">
<column name="price" sql-type="decimal(8,4)" not-null="true" />
</property>
<property name="freeDrink">
<column name="freeDrink" sql-type="smallint(5) unsigned" not-null="true" />
</property>
<property name="freeSalad">
<column name="freeSalad" sql-type="smallint(5) unsigned" not-null="true" />
</property>
</class>
</hibernate-mapping>
pastaCombo 类:
namespace FrancosPoS.DBMapping
public class pastaCombo
public pastaCombo()
public virtual int idPastaC get; set;
public virtual string type get; set;
public virtual string price get; set;
public virtual int freeDrink get; set;
public virtual int freeSalad get; set;
我错过了什么?
此致,
PS.:属性被注释是因为我(认为我)不需要它们,因为我的类具有对象类型,而不是 int ID。如果我使用它 NHibernate 会抛出“尝试通过反射设置属性类型”的错误。
编辑:包括 PastaCombo 映射和类。
【问题讨论】:
【参考方案1】:我刚刚遇到了同样的错误:
An association from the table <table name> refers to an unmapped class: <my entity class>
解决我的问题的唯一解决方案是在映射文件中添加 .hbm,您的文件名应采用以下格式:<filename>.hbm.xml
【讨论】:
谢谢,您的建议对我有帮助。我忘记添加.hbm。到文件名。 谢谢!我搜索了几个小时!经典复制+粘贴+f2(重命名)错误:)【参考方案2】:那么您是否将 FrancosPoS.DBMapping.pastaCombo 映射到某个地方? Is 是多对一的,需要引用映射的实体类型。
您对 pasteCombo 的映射是否实际包含在程序集中(如果您使用嵌入式资源)并且程序集是否已加载到会话工厂?
【讨论】:
是的,我做到了。我是 NHibernate 的新手,所以我不知道应该做什么。我试过谷歌,但大多数多对一的例子与我的非常相似,除了我在 PastaCombo 中没有一对多的情况。无论如何,我编辑了我的帖子以包含 PastaCombo 映射。请你看看,看看是怎么回事?真诚的, 应该是,但我现在检查了,它不是! :P 这当然行不通!我不仔细检查它是愚蠢的!谢谢!【参考方案3】:我可以看到这个问题的答案已被接受,但我想补充一点。我确实花了半天时间试图理解为什么会抛出这个异常。我已经搜索了十几个答案,但我无法找出问题所在。我已将 NHibernate 集成到我的项目中,观看 this 帖子。在我的 Models 文件夹中,我创建了一个内部文件夹 NHibernate,并在其中创建了一个文件夹 Configuration,其中包含 hibernate.cfg.xml 文件和一个 Mappings 文件夹,其中我的实体的所有映射都位于像这个 EntityName 这样的文件下。 hbm.xml。
问题是在我的多对一和一对多映射中,在类属性中我只有实体类名。例如 class="类别"。这条路不够用!!!我看过this 的帖子,上面有一个短语“完全合格的名称”。这使我从 class="Category" 更改为 class="myProject.Models.Category" 以便它可以找到 Category 类。
希望对您有所帮助!
【讨论】:
以上是关于来自表 Y 的关联引用了一个未映射的类:Y - C# NHibernate的主要内容,如果未能解决你的问题,请参考以下文章