2012-05-24 2 views
1

Давайте предположим следующую коллекцию:Дополнительные ленивые Извлечение результатов в 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 ...

ответ

0

Из того, что я вижу, «элементы» могут быть пустыми, и вы пытаетесь сделать Count() на нулевом значении. Лучше всего проверить, является ли оно нулевым, прежде чем попробовать Count()

+0

Да, это то, о чем я думал, но почему NHibernate не инициализирует пустой список так же, как с 'lazy =" true "?? – sl3dg3

+0

Не уверен, думаю, что он «лишний ленивый» ;-) никогда не использовал его сам. У меня есть все мои коллекции/ссылки ленивые, но всегда приносите их по мере необходимости в запросах и никогда не полагайтесь на lazyloading. – Chev

+0

Я исправлю: это не 'null' - поэтому я не могу проверить это ... – sl3dg3

Смежные вопросы