1

次のNHibernateマッピングを使用した単純なサブクラスごとのテーブル継承があります

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-   cascade="none" default-lazy="true">
<class xmlns="urn:nhibernate-mapping-2.2" mutable="true" name="BillingDetail table="BillingDetails">
<id name="Id" type="System.Int32">
  <column name="Id" />
  <generator class="identity" />
</id>
<property name="DateAdded" type="System.DateTime">
  <column name="DateAdded" />
</property>    
<many-to-one class="Account name="Account">
  <column name="Account_id" />
</many-to-one>

<joined-subclass name="BankAccount table="BillingDetails_BankAccount">
  <key>
    <column name="Id"/>
  </key>
  <property name="AccountNumber" type="System.Int64">
    <column name="AccountNumber" />
  </property>
  <property name="SortCode" type="System.Int32">
    <column name="SortCode" />
  </property>
</joined-subclass>

<joined-subclass name="CreditCard table="BillingDetails_CreditCard">
  <key>
    <column name="Id" />
  </key>
  <property name="CardNumber" type="System.Int64">
    <column name="CardNumber" />
  </property>
  <property name="CardType" type="System.String">
    <column name="CardType" />
  </property>
  <property name="ExpiryDate" type="System.DateTime">
    <column name="ExpiryDate" />
  </property>
</joined-subclass>

</class>
</hibernate-mapping>

したがって、クレジットカードと銀行口座の両方が「請求の詳細」から継承されます。私のドメインレイヤー内には、次のステートメントがあります。

var billingDetail = (from a in unitOfWork.Context.BillingDetail.OfType<CreditCard>()
                            select a).FirstOrDefault();

上記の「unitOfWork.Context」プロパティは、ISession 作業単位へのアクセスを提供するだけです。アプリケーションを実行すると、次のエラーが表示されます。

BillingDetail = 'unitOfWork.Context.BillingDetail' は、タイプ 'NHibernate.PropertyAccessException' の例外をスローしました

「varbillingDetail...」ステートメントにブレークポイントを設定し、プログラムを実行してこのエラーを調べると、上記のメッセージが表示されます。ただし、再生をクリックしてプログラムの実行を続行すると、上記のメッセージが表示される代わりに、プログラムは正常に実行され、すべてのデータがデータベースに入力されます。ブレークポイントを検査しないと、プログラムがクラッシュします (実際にマッピングに問題がある場合は予想通りです)。

発生しているように見えるのは、「BankAccount」エンティティが発生するたびに例外が発生することですが、すべての CreditCard エンティティは問題ありません。BankAccount オブジェクトを除外しないという "OfType" に何か問題がありますか?

4

1 に答える 1

0

ここでの回答は興味深いものではありませんでした。私は言った完全なエラーにもっと注意を払うべきでした:

無効なキャスト (プロパティ タイプの不一致についてマッピングを確認してください)

エラーが私に言ったことをしたとき、Int32としてマップされたがInt64であるはずの列を見ました。私はあまり賢くありません。

于 2011-04-06T16:43:49.370 に答える