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

ini*_*iki 82 nhibernate nhibernate-mapping fluent-nhibernate

我有一个名为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;
    }
}
Run Code Online (Sandbox Code Playgroud)

它使用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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

ReportRequest objReportRequest = new ReportRequest(2, new List<int>() { 11, 12, 15 });
Run Code Online (Sandbox Code Playgroud)

并尝试使用保存对象在数据库中

session.Save(objReportRequest);
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

Mau*_*fer 155

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

在这种情况下,请使用IList<int>而不是List<int>

  • 此链接不再存在.我们非常感谢更新的内容或简要内容. (2认同)
  • 我对stackoverflow上抱怨死链接的人数感到困惑。没人听说过archive.org吗?https://web.archive.org/web/20091105034326/http://elliottjorgensen.com/nhibernate-api-ref/NHibernate.Collection/IPersistentCollection.html (2认同)