无法将NHibernate.Collection.Generic.PersistentGenericBag类型的对象强制转换为List

时间:2009-10-28 16:57:34

标签: nhibernate fluent-nhibernate nhibernate-mapping

我有一个名为ReportRequest的类:

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;
    }
}

使用Fluent Hibernate将其映射为:

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();
    }
}

现在,我创建了这个类的对象

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

并尝试使用

将对象保存在数据库中
session.Save(objReportRequest);

我收到以下错误: “无法转换类型为'NHibernate.Collection.Generic.PersistentGenericBag 1[System.Int32]' to type 'System.Collections.Generic.List 1 [System.Int32]'的对象。

我不确定我是否正确映射了EntityIds属性。 请指导。

谢谢!

2 个答案:

答案 0 :(得分:154)

使用集合接口而不是具体集合,因此NHibernate可以为其注入自己的集合实现。

在这种情况下,请使用IList<int>代替List<int>

答案 1 :(得分:0)

我发现使用ICollection<T>IList<T>无效的地方起作用。

我不是NHibernate向导,但我确实想向可能会遇到此问题的其他人投掷骨头。