ไม่สามารถส่งวัตถุประเภท NHibernate.Collection.Generic.PersistentGenericBag to List


85

ฉันมีคลาสชื่อ 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 ถูกต้องหรือไม่ กรุณาชี้แนะ

ขอขอบคุณ!


คุณแน่ใจหรือไม่ว่าต้องการรายชื่อ ints ไม่ใช่รายการของเอนทิตีที่เกี่ยวข้อง
Mauricio Scheffer

คำตอบ:


161

ใช้อินเทอร์เฟซการรวบรวมแทนคอลเลกชันคอนกรีตดังนั้น NHibernate จึงสามารถฉีดเข้าไปด้วยการใช้งานคอลเลกชันของตัวเอง

ในกรณีนี้ให้ใช้IList<int>แทนList<int>


1
ขอขอบคุณ! แก้ไขปัญหา คุณช่วยอธิบายให้ละเอียดหน่อยได้ไหมเมื่อคุณพูดว่า 'NHibernate สามารถฉีดมันด้วยการใช้คอลเลกชันของมันเอง'
inutan

มีคำอธิบายที่นี่: surcombe.com/nhibernate-1.2/api/html/…
Mauricio Scheffer

2
ไม่มีลิงก์นี้แล้ว เนื้อหาที่อัปเดตหรือเนื้อหาสั้น ๆ จะได้รับการชื่นชมมาก
Noich


2
ฉันสับสนกับจำนวนคนใน stackoverflow ที่บ่นเกี่ยวกับลิงก์ที่ตายแล้ว ไม่มีใครเคยได้ยิน archive.org? web.archive.org/web/20091105034326/http://elliottjorgensen.com/…
Mauricio Scheffer

0

ฉันพบว่าการใช้ICollection<T>งานIList<T>ไม่ได้ผล

ฉันไม่ใช่พ่อมด NHibernate แต่ฉันต้องการโยนกระดูกให้คนอื่นที่อาจเข้ามาเกี่ยวข้องกับปัญหานี้


ขึ้นอยู่กับว่าคอลเล็กชันของคุณจะถูกแมปอย่างไร สำหรับbagคุณสามารถใช้IList<T>และสำหรับชุด -ISet<T>
Roman Artiukhin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.