Давайте предположим следующую коллекцию:Дополнительные ленивые Извлечение результатов в DBNull
<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
Edit: Всего StackTrace:
[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 [...]
Второе редактирование: Если открыть коллекцию с отладчиком, есть HResult от источника mscorelib
, который звучит так, как если появляется ошибка уже глубоко в мире .com ...
Да, это то, о чем я думал, но почему NHibernate не инициализирует пустой список так же, как с 'lazy =" true "?? – sl3dg3
Не уверен, думаю, что он «лишний ленивый» ;-) никогда не использовал его сам. У меня есть все мои коллекции/ссылки ленивые, но всегда приносите их по мере необходимости в запросах и никогда не полагайтесь на lazyloading. – Chev
Я исправлю: это не 'null' - поэтому я не могу проверить это ... – sl3dg3