Ich habe eine Klasse namens ReportRequest als:
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;
}
}
Es wird mit Fluent Hibernate wie folgt zugeordnet:
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();
}
}
Jetzt erstelle ich ein Objekt dieser Klasse als
ReportRequest objReportRequest = new ReportRequest(2, new List<int>() { 11, 12, 15 });
und versuchen Sie, das Objekt in der Datenbank mit zu speichern
session.Save(objReportRequest);
Ich erhalte die folgende Fehlermeldung:
"Objekt vom Typ 'NHibernate.Collection.Generic.PersistentGenericBag 1[System.Int32]' to type 'System.Collections.Generic.List
1 [System.Int32]' kann nicht umgewandelt werden. "
Ich bin nicht sicher, ob ich die Eigenschaft EntityIds richtig zugeordnet habe. Bitte führen.
Danke dir!
Antworten:
Verwenden Sie Sammlungsschnittstellen anstelle konkreter Sammlungen, damit NHibernate eine eigene Sammlungsimplementierung hinzufügen kann.
In diesem Fall verwenden Sie
IList<int>
anstelle vonList<int>
quelle
Ich fand, dass die Verwendung dort
ICollection<T>
funktionierte, woIList<T>
es nicht funktionierte.Ich bin kein NHibernate-Assistent, aber ich wollte jemand anderem einen Knochen zuwerfen, der in dieser Angelegenheit landen könnte.
quelle
bag
Sie könnenIList<T>
und für Set -ISet<T>