NHibernate-每个子类的表继承导致;无效的强制转换“;例外情况

NHibernate-每个子类的表继承导致;无效的强制转换“;例外情况,nhibernate,inheritance,casting,joined-subclass,Nhibernate,Inheritance,Casting,Joined Subclass,我用下面的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

我用下面的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();
var billingDetail=(来自unitOfWork.Context.billingDetail.OfType()中的a)
选择a).FirstOrDefault();
上面的“unitOfWork.Context”属性只允许我访问ISession工作单元。当我运行应用程序时,出现以下错误:

BillingDetail='unitOfWork.Context.BillingDetail'引发了类型为'NHibernate.PropertyAccessException'的异常 Message=“无效强制转换(检查属性类型不匹配的映射);BankAccount的setter”

如果我在“var billingDetail…”语句中放置一个断点并运行程序来检查这个错误,我可以看到上面的消息。但是,如果我随后单击“播放”继续执行程序,程序将成功运行并将所有数据输入数据库,而不是使用上面的消息结束。如果不检查breakpount,程序就会崩溃(如果映射确实存在问题,我会预料到这一点)


似乎正在发生的是,每次它看到一个“银行账户”实体是例外,但所有信用卡实体都是好的。“OfType”没有过滤掉BankAccount对象,这有什么问题吗?

这里的答案没什么意思。我本应该更加注意其中的全部错误,即:

无效强制转换(检查映射中的属性类型不匹配)

当我执行错误告诉我的操作时,我看到一个列被映射为Int32,但应该是Int64。我不是很聪明