2009-10-28 13 views
76

tengo una clase llamada ReportRequest como:No se puede convertir objeto de tipo NHibernate.Collection.Generic.PersistentGenericBag a la lista

public class ReportRequest 
{ 
    Int32 templateId; 
    List<Int32> entityIds; 

    public virtual Int32? Id 
    { 
     get; 
     set; 
    } 

    public virtual Int32 TemplateId 
    { 
     get { return templateId; } 
     set { templateId = value; } 
    } 

    public virtual List<Int32> EntityIds 
    { 
     get { return entityIds; } 
     set { entityIds = value; } 
    } 

    public ReportRequest(int templateId, List<Int32> entityIds) 
    { 
     this.TemplateId = templateId; 
     this.EntityIds = entityIds; 
    } 
} 

Se asignan mediante Fluido Hibernate como:

public class ReportRequestMap : ClassMap<ReportRequest> 
{ 
    public ReportRequestMap() 
    { 
     Id(x => x.Id).UnsavedValue(null).GeneratedBy.Native(); 
     Map(x => x.TemplateId).Not.Nullable();    
     HasMany(x => x.EntityIds).Table("ReportEntities").KeyColumn("ReportRequestId").Element("EntityId").AsBag().Cascade.AllDeleteOrphan(); 
    } 
} 

Ahora, puedo crear un objeto de esta clase como

ReportRequest objReportRequest = new ReportRequest(2, new List<int>() { 11, 12, 15 }); 

y tratar de salvar el objeto en la base de datos utilizando

session.Save(objReportRequest); 

me sale el siguiente error: "No se puede convertir objeto de tipo 'NHibernate.Collection.Generic.PersistentGenericBag 1[System.Int32]' to type 'System.Collections.Generic.List 1 [System.Int32]'. "

no estoy seguro de si he asignado los EntityIds propiedad correctamente. favor guía.

Gracias!

+0

¿está seguro de que desea una lista de enteros y no una lista de entidades relacionadas? –

+0

+1 Acabo de tener el mismo problema –

Respuesta

141

interfaces de uso de la colección en lugar de colecciones concretas, por lo que NHibernate puede inyectar con su propio implementación de la colección.

En este caso, utilice IList<int> en lugar de List<int>

+1

¡Gracias! resuelto el problema ¿Puede explicar un poco cuando dice 'NHibernate puede inyectarlo con su propia implementación de colección'? – iniki

+0

Se explica aquí: http://www.surcombe.com/nhibernate-1.2/api/html/T_NHibernate_Collection_IPersistentCollection.htm –

+2

Este enlace ya no existe. Un contenido actualizado o breve sería muy apreciado. – Noich

Cuestiones relacionadas