5

例外が発生します:

"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マッピングとクラスが含まれています。

4

3 に答える 3

11

私はちょうど同じエラーを経験しました:

An association from the table <table name> refers to an unmapped class: <my entity class>

そして、私の問題を解決した唯一の解決策は、マッピングファイルに.hbmを追加することです。ここで、ファイル名は次の形式である必要があります。<filename>.hbm.xml

于 2013-08-15T14:38:49.907 に答える
6

では、FrancosPoS.DBMapping.pastaComboをどこかにマッピングしましたか?Isは多対1であり、マップされたエンティティタイプを参照している必要があります。

pastaComboへのマッピングは実際にアセンブリに含まれていますか(埋め込みリソースを使用している場合)、アセンブリはセッションファクトリにロードされていますか?

于 2012-04-26T05:48:39.373 に答える
5

この質問には受け入れられた答えがあることがわかりますが、何か追加したいと思います。私は文字通り、この例外がスローされた理由を理解するために半日を費やしました。私は何十もの答えを検索しましたが、問題を理解することができませんでした。この投稿を見て、プロジェクトにNHibernateを統合しました。モデルフォルダーに内部フォルダーNHibernateを作成し、その中にhibernate.cfg.xmlファイルを保持する構成フォルダーと、エンティティのすべてのマッピングがこのEntityNameなどのファイルの下にあるMappingsフォルダーを作成しました。 hbm.xml。

問題は、多対1および1対多のマッピングで、クラス属性にエンティティクラス名しかなかったということでした。例:class="Category"。このパスでは不十分です!!!。この投稿を見たことがありますが、「完全修飾名」というフレーズがあります。これにより、class="Category"からclass="myProject.Models.Category"に変更して、Categoryクラスを見つけることができます。

この助けを願っています!

于 2014-12-14T18:49:16.210 に答える