J'ai une classe appelée ReportRequest comme:
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;
}
}
Il est mappé à l'aide de Fluent Hibernate comme:
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();
}
}
Maintenant, je crée un objet de cette classe comme
ReportRequest objReportRequest = new ReportRequest(2, new List<int>() { 11, 12, 15 });
et essayez d'enregistrer l'objet dans la base de données à l'aide
session.Save(objReportRequest);
J'obtiens l'erreur suivante: "Impossible de caster un objet de type 'NHibernate.Collection.Generic.PersistentGenericBag1[System.Int32]' to type 'System.Collections.Generic.List
1 [System.Int32] '. "
Je ne sais pas si j'ai correctement mappé la propriété EntityIds. Veuillez guider.
Je vous remercie!
Utilisez des interfaces de collection au lieu de collections concrètes, afin que NHibernate puisse lui injecter sa propre implémentation de collection.
Dans ce cas, utilisez IList<int>
au lieu de List<int>
J'ai trouvé qu'en utilisant ICollection<T>
a travaillé où IList<T>
non.
Je ne suis pas un assistant NHibernate, mais je voulais jeter un os à quelqu'un d'autre qui pourrait atterrir sur ce problème.