c# - isessionfactory sessionfactory fluently configure()
Error "no se puede convertir PersistentGenericSet a ISet" (3)
Con Nhibernate 4, usar System.Collections.Generic.ISet<>
es ahora el camino a seguir .
El error mostrado en esta pregunta ya no debería ocurrir.
Me sale este error:
No se puede convertir el objeto de tipo ''NHibernate.Collection.Generic.PersistentGenericSet
1[IocWinFormTestEntities.People]'' to type ''System.Collections.Generic.ISet
1 [IocWinFormTestEntities.People]''.
La entidad:
public class Event
{
public Event()
{
this.People = new HashSet<People>();
}
public virtual Guid Id { get; private set; }
public virtual ISet<People> People { get; set; }
}
Mapa de anulación de clase:
public class EventMapOverride : IAutoMappingOverride<Event>
{
public void Override(AutoMapping<Event> mapping)
{
mapping.HasMany(c => c.People)
.AsSet()
.Cascade.AllDeleteOrphan();
}
}
Generado hbm de automapper fluido:
<set cascade="all-delete-orphan" name="People">
<key>
<column name="Event_id" />
</key>
<one-to-many class="IocWinFormTestEntities.People, IocWinFormTestEntities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</set>
Que pasa
El último NHibernate utiliza Iesi.Collections.ISet, no System.Collections.Generic.ISet. Puede hacer referencia al ensamblado de Iesi o usar System.Collections.Generic.ICollection:
public virtual ICollection<People> People { get; set; }
La interfaz ISet hereda de ICollection.
Su problema es que está usando ISet en System.Collections.Generic
namespace pero nHibernate espera que Iesi.Collections.Generic.ISet<>
sea Iesi.Collections.Generic.ISet<>
. Así que cambia la definición de tu propiedad a
public virtual Iesi.Collections.Generic.ISet<People> People { get; set; }
Si desea utilizar la interfaz .net 4 ISet<>
, lea este article