NHibernate.Collection.Generic.PersistentGenericBag को सूची में टाइप करने के लिए ऑब्जेक्ट डालने में असमर्थ


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

यह धाराप्रवाह हाइबरनेट का उपयोग करके मैप किया गया है:

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.List1 [System.Int32]'। "

मुझे यकीन नहीं है कि मैंने संपत्ति EntityIds को सही ढंग से मैप किया है। कृपया मार्गदर्शन करें।

धन्यवाद!


क्या आप सुनिश्चित हैं कि आप सूची की सूची चाहते हैं और संबंधित संस्थाओं की सूची नहीं?
मौरिसियो शेफ़र

जवाबों:


161

कंक्रीट संग्रह के बजाय संग्रह इंटरफेस का उपयोग करें, इसलिए NHibernate इसे अपने संग्रह कार्यान्वयन के साथ इंजेक्ट कर सकता है।

इस मामले में, के IList<int>बजाय का उपयोग करेंList<int>


1
धन्यवाद! इस मुद्दे को हल किया। क्या आप थोड़ा विस्तार से बता सकते हैं जब आप कहते हैं 'NHibernate इसे अपने संग्रह कार्यान्वयन के साथ इंजेक्ट कर सकता है।'
inutan

इसे यहाँ समझाया गया है: surcombe.com/nhibernate-1.2/api/html/…
मौरिसियो शेफ़र

2
यह लिंक अब मौजूद नहीं है। एक अद्यतन या संक्षिप्त सामग्री की बहुत सराहना की जाएगी।
नोइच


2
मैं मृत लिंक के बारे में शिकायत करने वाले stackoverflow पर लोगों की संख्या से भ्रमित हूँ। आर्काइव.ऑर्ग के बारे में किसी ने नहीं सुना है? web.archive.org/web/20091105034326/http://elliottjorgensen.com/…
मौरिसियो शेफ़र

0

मैंने पाया कि ICollection<T>जहाँ IList<T>काम नहीं किया वहाँ काम करना ।

मैं कोई NHibernate जादूगर नहीं हूं, लेकिन मैं किसी और से हड्डी फेंकना चाहता था जो इस मुद्दे पर उतर सकता है।


यह इस बात पर निर्भर करता है कि आपके संग्रह को मैप कैसे किया जाता है। के लिए bagआप उपयोग कर सकते हैं IList<T>और सेट के लिए -ISet<T>
रोमन Artiukhin
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.