Загрузка коллекции NHibernate, «незаконный доступ к загрузке коллекции»

У меня проблема с загрузкой коллекции. Настройка у меня простая: от -до -множество ассоциаций, сопоставленных с помощью FluentNHibernate. Объект загружается без создания исключения, но при доступе к связанной коллекции отображается «незаконный доступ к загрузке коллекции ». Я вставлю сюда соответствующую часть кода.

[Serializable]
[DataContract(IsReference = true)]
public partial class Department : Entity
{
   ...
    [DataMember]
    public virtual IList<PressJobRun> PressJobRun
    {
        get { return pressJobRunField; }
        protected set { pressJobRunField = value; }
    }
   ...
}

отображается следующим образом

public DepartmentMap()
{
    Id(x => x.Id);
    Map(x => x.Name)
       .Not.Nullable()
       .Length(100);
    HasMany(x => x.PressJobRun)
       .AsBag()
       .Inverse()
       .Cascade.AllDeleteOrphan()
       .LazyLoad()
       .BatchSize(50);
   ...
}

Я также пытался отключить ленивую загрузку, исключив строку и вызвав .Not.LazyLoad(), однако конец тот же.

    using (var tx = m_Repository.Session.BeginTransaction())
    {
        var depts = m_Repository.Session.CreateCriteria<Department>().List<Department>();
        var dept = depts[0];
       ...
    }

Я понимаю, что разоблачение сеанса - это не то, что нужно делать, но это было сделано для того, чтобы убедиться, что сеанс открыт.

Когда я детализирую исключение, я вижу следующую трассировку стека:

   at NHibernate.Collection.AbstractPersistentCollection.Initialize(Boolean writing)
   at NHibernate.Collection.AbstractPersistentCollection.Read()
   at NHibernate.Collection.AbstractPersistentCollection.ReadSize()
   at NHibernate.Collection.PersistentBag.get_Count()
   at NHibernate.DebugHelpers.CollectionProxy`1.get_Items()

Интересный гремлин приходит сюда. Я установил точку останова в строке установки свойства PressJobRun.

  • если я перешагну через него и быстро просмотрю pressJobRunField, я увижу «незаконный доступ к исключению загрузки ».
  • если я сначала быстро просматриваю переменную value, я вижу загруженную коллекцию. Перешагивание через линию сеттера работает, как и ожидалось.

Чем я пользуюсь

  • Visual Studio 2012, ориентированный на.NET 4
  • NHibernate 3.3.1.400
  • SQL CE 4
  • Замок
  • Средство Castle AutoTx
  • Я сам управляю сеансом по запросу WCF

Что я пробовал

  • отключение ленивой загрузки
  • убедиться, что сеанс открыт и что это тот же сеанс во время выполнения кода нарушения
  • перевернутая Invertedкарта коллекции (я думаю, что она должна быть инвертирована)
  • очищенное и восстановленное решение
  • убедился в Configuration Manager, что все проекты в решении строятся
  • настроить отладчик на прерывание всех выброшенных исключений.Отладчик не ломается, за исключением того, что я вижу в коллекции
7
задан Nikola Radosavljević 1 August 2012 в 11:02
поделиться