This is a test code:
Code:
IWorkspace mws = WorkspaceFactory.CreateWorkspace(); // This encapsulate the session
IList<Paralelo> paralelos = new GenericRepository<Paralelo>(mws).GetAll(); // _session.CreateCriteria(typeOfResult).List<T>();
IList<CursoMateria> cursos = new GenericRepository<CursoMateria>(mws).GetAll();
//IList<Materia> materias = new GenericRepository<Materia>(mws).GetAll();
IList<ParcialDivicion> diviciones = new GenericRepository<ParcialDivicion>(mws).GetAll();
IList<Profesor> profesores = new GenericRepository<Profesor>(mws).GetAll();
Paralelo paralelo = paralelos[20];
Materia materia = cursos[1].Materias[1];
ParcialDivicion divicion = diviciones[0];
Profesor profesor = profesores[0];
Nota mnota = new Nota();
mnota.FechaRegistro = DateTime.Now;
mnota.Materia = materia;
mnota.ParcialDivicion = divicion;
mnota.Profesor = profesor;
mnota.ValorNota = 1;
Matricula mat = null;
foreach (Matricula matr in paralelo.Matriculas)
{
mat = matr;
break;
}
mnota.Matricula = mat;
mat.NotasList.Add(mnota);
mws.PersistAll(); // _session.Reconnect(); _session.Flush();
// I added this code to clear the session and retreive the object again and this work fine but without this the error happend
mws.Clean();
//paralelos = new GenericRepository<Paralelo>(mws).GetAll();
//paralelo = paralelos[20];
paralelo = new GenericRepository<Paralelo>(mws).GetById(paralelo.Key);
foreach (Matricula matr in paralelo.Matriculas)
{
mat = matr;
break;
}
// End added code
materia = cursos[1].Materias[2];
mnota = new Nota();
mnota.FechaRegistro = DateTime.Now;
mnota.Materia = materia;
mnota.ParcialDivicion = divicion;
mnota.Profesor = profesor;
mnota.ValorNota = 2;
mnota.Matricula = mat;
mat.NotasList.Add(mnota);
mws.PersistAll();
Paralelo is the root object
As you can see Paralelo has a Matricula iset collection and Matricula has a iset nota collection
Map Files:
Code:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="notas.DomainModel" assembly="notas.DomainModel">
<class name="Paralelo" table="paralelo" where="Eliminado=0">
<id name="Key" type="Int64" unsaved-value="0">
<column name="IDParalelo" sql-type="bigint" not-null="true"/>
<generator class="hilo">
<param name="table">hi_value</param>
<param name="column">next_value</param>
<param name="max_lo">10</param>
</generator>
</id>
<property name="Nombre">
<column name="Nombre" length="50" sql-type="varchar" not-null="true"/>
</property>
<property name="Periodo">
<column name="Periodo" length="4" sql-type="char" not-null="true"/>
</property>
<property name="FechaRegistro">
<column name="FechaRegistro" sql-type="datetime" not-null="true"/>
</property>
<many-to-one name="Curso" lazy="false" column="IDCurso" class="Curso" cascade="none" not-null="false" />
<set name="Matriculas" lazy="true" cascade="all">
<key column="IDParalelo"/>
<one-to-many class="Matricula"/>
</set>
<property name="Activo">
<column name="Activo" sql-type="smallint" not-null="true"/>
</property>
<property name="Eliminado">
<column name="Eliminado" sql-type="smallint" not-null="true"/>
</property>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="notas.DomainModel" assembly="notas.DomainModel">
<class name="Matricula" table="matricula">
<id name="Key" type="Int64" unsaved-value="0">
<column name="IDMatricula" sql-type="bigint" not-null="true"/>
<generator class="hilo">
<param name="table">hi_value</param>
<param name="column">next_value</param>
<param name="max_lo">10</param>
</generator>
</id>
<many-to-one name="Estudiante" lazy="false" column="IDEstudiante" class="Estudiante" cascade="none" not-null="false" />
<many-to-one name="Paralelo" lazy="false" column="IDParalelo" class="Paralelo" cascade="none" not-null="false" />
<set name="NotasList" generic="true" lazy="true" cascade="all" fetch="join">
<key column="IDMatricula"/>
<one-to-many class="Nota"/>
</set>
<set name="AsistenciaList" lazy="true" cascade="all">
<key column="IDMatricula"/>
<one-to-many class="Asistencia"/>
</set>
<property name="CodigoMatricula">
<column name="CodigoMatricula" length="20" sql-type="varchar" not-null="false"/>
</property>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="notas.DomainModel" assembly="notas.DomainModel">
<class name="Nota" table="notas">
<id name="Key" type="Int64" unsaved-value="0">
<column name="IDNotas" sql-type="bigint" not-null="true"/>
<generator class="hilo">
<param name="table">hi_value</param>
<param name="column">next_value</param>
<param name="max_lo">10</param>
</generator>
</id>
<property name="FechaRegistro">
<column name="FechaRegistro" sql-type="datetime" not-null="true"/>
</property>
<property name="ValorNota">
<column name="ValorNota" sql-type="decimal" not-null="true"/>
</property>
<many-to-one name="Profesor" lazy="false" column="IDProfesor" class="Profesor" cascade="none" not-null="false" />
<many-to-one name="Materia" lazy="false" column="IDMateria" class="Materia" cascade="none" not-null="false" />
<!--<many-to-one name="TipoNota" lazy="false" column="IDTipoNota" class="TipoNota" cascade="none" not-null="false" />-->
<many-to-one name="ParcialDivicion" lazy="false" column="IDParcialDivicion" class="ParcialDivicion" cascade="none" not-null="false" />
<many-to-one name="Matricula" column="IDMatricula" class="Matricula" lazy="false" cascade="none"/>
</class>
</hibernate-mapping>