NHibernate.Collection.Generic.PersistentGenericBag türündeki nesne Listeye dönüştürülemiyor


85

ReportRequest adlı bir sınıfım var:

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 kullanılarak şu şekilde eşleştirilmiştir:

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

Şimdi, bu sınıfın bir nesnesini şu şekilde oluşturuyorum:

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

ve nesneyi veritabanına kaydetmeyi deneyin.

session.Save(objReportRequest);

Şu hatayı alıyorum: "'NHibernate.Collection.Generic.PersistentGenericBag 1[System.Int32]' to type 'System.Collections.Generic.List1 [System.Int32]' türündeki nesne dönüştürülemiyor . "

EntityIds özelliğini doğru şekilde eşleştirip eşlemediğimden emin değilim. Lütfen rehberlik edin.

Teşekkür ederim!


İlgili varlıkların bir listesini değil de girişlerin listesini istediğinizden emin misiniz?
Mauricio Scheffer

Yanıtlar:


161

Somut koleksiyonlar yerine toplama arayüzlerini kullanın, böylece NHibernate bunu kendi koleksiyon uygulamasıyla enjekte edebilir.

Bu durumda, IList<int>yerine kullanınList<int>


1
Teşekkür ederim! sorunu çözdü. 'NHibernate bunu kendi koleksiyon uygulamasıyla enjekte edebilir' derken biraz ayrıntı verebilir misiniz?
inutan


2
Bu bağlantı artık mevcut değil. Güncellenmiş bir veya kısa içerik çok takdir edilecektir.
Noich


2
Stackoverflow'daki ölü bağlantılardan şikayet eden kişi sayısı beni karıştırıyor. Archive.org'u kimse duymadı mı? web.archive.org/web/20091105034326/http://elliottjorgensen.com/…
Mauricio Scheffer

0

Kullanmanın ICollection<T>çalışmadığı yerlerde çalıştığını buldum IList<T>.

NHibernate sihirbazı değilim, ama bu konuya inebilecek başka birine kemik atmak istedim.


Koleksiyonunuzun nasıl eşlendiğine bağlıdır. For bagyou can use IList<T>and for set -ISet<T>
Roman Artiukhin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.