1

次のコレクションを想定しましょう。

<list name="Items" inverse="true" cascade="all-delete-orphan" lazy="extra">
    <key column="ItemId"/>
    <index column="Sortorder" />
    <one-to-many class="MyProject.Model.Item, MyProject"/>
</list>

元々は でしたがlazy="true"、性能を上げたいと思いました。アイテムがある限り、これはうまく機能します。何もない場合、次のステートメントの結果は次のようになりますSystem.InvalidCastException: Object cannot be cast from DBNull to other types.

if (items.Count > 0) { // Type of items: IList<item>

これはうまくいきましlazy="true"た。ここで何が欠けていますか?

sl3dg3

編集:スタックトレース全体:

[InvalidCastException: Object cannot be cast from DBNull to other types.] System.DBNull.System.IConvertible.ToInt32(IFormatProvider provider) +56 System.Convert.ToInt32(Object value) +28 NHibernate.Persister.Collection.AbstractCollectionPersister.GetSize(Object key, ISessionImplementor session) +334 NHibernate.Collection.AbstractPersistentCollection.ReadSize() +132 NHibernate.Collection.PersistentList.get_Count() +12 MyProject.Provider.MyProvider.SomeMethod() in [...]

mscorelib2 番目の編集: デバッガーでコレクションを開くと、.com の世界の奥深くにエラーが既に表示されているように聞こえるソースからの HResult があります...

4

1 に答える 1

0

私が見るところ、「アイテム」が null である可能性があり、null 値に対して Count() を実行しようとしています。Count() を試す前に null かどうかを確認することをお勧めします

于 2012-05-24T14:32:02.800 に答える