Estoy atravesando por el siguiente problema. He definido las siguientes clases:
public class ReducedModalityReductionDataSet : Entity<Guid>
{
public ReducedModalityReductionDataSet()
{
ReducedModalityReductionDataSetItems = new Iesi.Collections.Generic.HashedSet<ReducedModalityReductionDataSetItem>();
}
public virtual System.Int32 DataSetNumber { get; set; }
public virtual System.String DataSetName { get; set; }
public virtual System.String Company { get; set; }
public virtual System.Byte Status { get; set; }
public virtual ISet<ReducedModalityReductionDataSetItem> ReducedModalityReductionDataSetItems { get; protected set; }
public virtual void AddReductionDataSetItem(ReducedModalityReductionDataSetItem reductionItem)
{
reductionItem.ReducedModalityReductionDataSet = this;
ReducedModalityReductionDataSetItems.Add(reductionItem);
}
}
public class ReducedModalityReductionDataSetItem
{
public ReducedModalityReductionDataSetItem()
{
ReducedModalityReductionDataSetPeriods = new Iesi.Collections.Generic.HashedSet<ReducedModalityReductionDataSetPeriod>();
}
public virtual System.Guid Id { get; set; }
public virtual System.String Cuil { get; set; }
public virtual Nullable<System.DateTime> FechaAlta { get; set; }
public virtual System.String Modalidad { get; set; }
public virtual ReducedModalityReductionDataSet ReducedModalityReductionDataSet { get; set; }
public virtual ISet<ReducedModalityReductionDataSetPeriod> ReducedModalityReductionDataSetPeriods { get; protected set; }
public virtual void AddPeriod(ReducedModalityReductionDataSetPeriod period)
{
period.ReducedModalityReductionDataSetItem = this;
ReducedModalityReductionDataSetPeriods.Add(period);
}
}
public class ReducedModalityReductionDataSetPeriod : ComponentBase
{
public virtual System.Int32 MonthNumber { get; set; }
public virtual System.String MonthYear { get; set; }
public virtual System.String ReductionValue { get; set; }
public virtual ReducedModalityReductionDataSetItem ReducedModalityReductionDataSetItem { get; set; }
public override bool Equals(object entity)
{
if (entity == null)
return false;
if (ReferenceEquals(this, entity))
return true;
return false;
}
public override int GetHashCode()
{
return this.MonthNumber.GetHashCode() +
this.MonthYear.GetHashCode() +
this.ReductionValue.GetHashCode();
}
}
En la clase ReducedModalityReductionDataSetItem he definido un colección de tipo ReducedModalityReductionDataSetPeriod el cual está definido como component en el archivo HBM:
<class name="ReducedModalityReductionDataSetItem" table="ReducedModalityReductionDataSetItem" schema="dbo">
<id name="Id" access="property" column="Id">
<generator class="assigned" />
</id>
<property name="Cuil" type="System.String" column="Cuil" />
<property name="FechaAlta" type="System.DateTime" column="FechaAlta" />
<property name="Modalidad" type="System.String" column="Modalidad" />
<many-to-one name="ReducedModalityReductionDataSet" class="ReducedModalityReductionDataSet" column="DataSet_Id" />
<set name="ReducedModalityReductionDataSetPeriods" table="ReducedModalityReductionDataSetPeriod" lazy="true" order-by="MonthNumber">
<key column="DataSetItem_Id" />
<composite-element class="ReducedModalityReductionDataSetPeriod">
<parent name="ReducedModalityReductionDataSetItem" />
<property name="MonthNumber" type="System.Int32" column="MonthNumber" not-null="true" />
<property name="MonthYear" type="System.String" column="MonthYear" not-null="true" />
<property name="ReductionValue" type="System.String" column="ReductionValue" not-null="true" />
</composite-element>
</set>
</class>
Los datos para persistir son obtenidos a través de archivos excel, los cuales pueden ser seleccionado de manera multiple.
Se iniciá una transacción y se hace un COMMIT (o ROLLBACK, si hay un error) cada vez que se lee un archivo. Al recorrer los archivos y empezar a guardar los datos, los datos con el primer archivo lo persiste correctamente. Al leer el segundo archivo y durante el COMMIT, veo en el archivo LOG (configurado con log4net), veo que se crean ejecutan varias sentencias DELETE.
Log file extract:
2013-05-23 09:48:19,715 [PayrollAppClientThread] DEBUG NHibernate.SQL [(null)] -
DELETE
FROM
@p0 = cd7ac39f-fa74-4571-abf3-7a2ec1b7a363 [Type: Guid (0)], @p1 = 2 [Type: Int32 (0)], @p2 = 'FEB-13' [Type: String (4000)], @p3 = '201' [Type: String (4000)]
2013-05-23 09:48:19,828 [PayrollAppClientThread] DEBUG NHibernate.SQL [(null)] -
DELETE
FROM
@p0 = cd7ac39f-fa74-4571-abf3-7a2ec1b7a363 [Type: Guid (0)], @p1 = 3 [Type: Int32 (0)], @p2 = 'MAR-13' [Type: String (4000)], @p3 = '201' [Type: String (4000)]
2013-05-23 09:48:19,921 [PayrollAppClientThread] DEBUG NHibernate.SQL [(null)] -
DELETE
FROM
@p0 = cd7ac39f-fa74-4571-abf3-7a2ec1b7a363 [Type: Guid (0)], @p1 = 4 [Type: Int32 (0)], @p2 = 'ABR-13' [Type: String (4000)], @p3 = '201' [Type: String (4000)]
Y se queda así de manera indefinida.
Me gustaría saber por que sucede esto y si tengo que tener en cuenta alguna configuración adicional.
Espero que me puedan ayudar con este problema.
Muchas gracias de antemano.