У меня проблема с загрузкой коллекции. Настройка у меня простая: от -до -множество ассоциаций, сопоставленных с помощью 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
, я вижу загруженную коллекцию. Перешагивание через линию сеттера работает, как и ожидалось.Чем я пользуюсь
Что я пробовал
Inverted
карта коллекции (я думаю, что она должна быть инвертирована)