Tengo un problema al cargar una colección. La configuración que tengo es una simple asociación de uno a varios, asignada mediante FluentNHibernate. La entidad se carga con la excepción suficiente lanzada, pero el acceso a la colección relacionada muestra "acceso ilegal a la colección de carga". Pegaré una parte relevante del código aquí.Carga de la colección NHibernate, "acceso ilegal a la colección de carga"
[Serializable]
[DataContract(IsReference = true)]
public partial class Department : Entity
{
...
[DataMember]
public virtual IList<PressJobRun> PressJobRun
{
get { return pressJobRunField; }
protected set { pressJobRunField = value; }
}
...
}
asignan de la siguiente manera
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);
...
}
También he intentado desactivar la carga diferida, mediante la exclusión de la línea y llamando .Not.LazyLoad()
, sin embargo final es el mismo.
using (var tx = m_Repository.Session.BeginTransaction())
{
var depts = m_Repository.Session.CreateCriteria<Department>().List<Department>();
var dept = depts[0];
...
}
Soy consciente de la exposición de sesión no es lo que hay que hacer, pero esto fue en los intentos para asegurarse de que la sesión está abierta.
Cuando desglosar la excepción que veo seguimiento de pila:
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()
El Gremlin interesante viene aquí. Establecí el punto de interrupción en la línea setter de la propiedad PressJobRun
.
- si camino sobre ella y reloj rápida
pressJobRunField
, veo el "acceso ilegal a excepción de carga". - si observo por primera vez la variable
value
, veo la colección cargada. Pasar por encima de la línea setter funciona como se esperaba.
Lo que yo uso
- Visual Studio 2012, dirigido a .NET 4
- NHibernate 3.3.1.400
- SQL CE 4
- Castillo
- Castillo AutoTx facitlity
- Administro la sesión p er WCF solicitar a mí mismo
Lo que he tratado
- desactivación de la carga diferida
- asegurado de que la sesión está abierta, y que se trata de una misma sesión durante la ejecución de código erróneo
- alternó
Inverted
mapa de la colección (pensé que debería invertirse) - solución limpiada y reconstruida
- se aseguró en Configuration Manager de que todos los proyectos en solución se están construyendo
- configuran el depurador para romper todas las excepciones lanzadas.Depurador no se rompe con la excepción de que yo vea SET en la recolección de