问题
I have a class called ReportRequest as:
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;
}
}
It is mapped using Fluent Hibernate as:
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();
}
}
Now, I create an object of this class as
ReportRequest objReportRequest = new ReportRequest(2, new List<int>() { 11, 12, 15 });
and try to Save the object in database using
session.Save(objReportRequest);
I get the following error:
"Unable to cast object of type 'NHibernate.Collection.Generic.PersistentGenericBag1[System.Int32]' to type 'System.Collections.Generic.List
1[System.Int32]'."
I am not sure if I have mapped the property EntityIds correctly. Please guide.
Thank you!
回答1:
Use collection interfaces instead of concrete collections, so NHibernate can inject it with its own collection implementation.
In this case, use IList<int>
instead of List<int>
回答2:
I found that using ICollection<T>
worked where IList<T>
did not.
I'm no NHibernate wizard, but I did want to throw a bone to someone else who might land on this issue.
来源:https://stackoverflow.com/questions/1638593/unable-to-cast-object-of-type-nhibernate-collection-generic-persistentgenericbag