Eu tenho uma classe chamada ReportRequest como:
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;
}
}
Ele é mapeado usando o Fluent 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();
}
}
Agora, eu crio um objeto desta classe como
ReportRequest objReportRequest = new ReportRequest(2, new List<int>() { 11, 12, 15 });
e tente salvar o objeto no banco de dados usando
session.Save(objReportRequest);
Recebo o seguinte erro:
"Não é possível lançar o objeto do tipo 'NHibernate.Collection.Generic.PersistentGenericBag 1[System.Int32]' to type 'System.Collections.Generic.List
1 [System.Int32]'. "
Não tenho certeza se mapeei a propriedade EntityIds corretamente. Por favor, guie.
Obrigado!
Respostas:
Use interfaces de coleção em vez de coleções concretas, para que o NHibernate possa injetá-lo com sua própria implementação de coleção.
Neste caso, use em
IList<int>
vez deList<int>
fonte
Descobri que usar
ICollection<T>
funcionou ondeIList<T>
não funcionou .Eu não sou nenhum mago do NHibernate, mas eu queria jogar um osso para outra pessoa que pudesse pousar neste problema.
fonte
bag
você pode usarIList<T>
e para definir -ISet<T>