额外的延迟获取会导致 DBNull

本文关键字:DBNull 获取 延迟 | 更新日期: 2023-09-27 18:35:16

让我们假设以下集合:

<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 [...]

第二次编辑:如果我使用调试器打开集合,则有一个来自源mscorelib的 HResult,这听起来好像错误已经出现在.com世界的深处......

额外的延迟获取会导致 DBNull

据我所知,"项目"可能是空的,您正在尝试对空值执行 Count()。最好在尝试 Count() 之前检查它是否为空