isessionfactory fluently c# nhibernate automapping

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