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

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.List1 [System.Int32]' 형식의 개체를 캐스팅 할 수 없습니다 . "

EntityIds 속성을 올바르게 매핑했는지 확실하지 않습니다. 안내해주세요.

감사합니다!


관련 엔터티 목록이 아닌 int 목록을 원하십니까?
Mauricio Scheffer

답변:


161

구체적인 컬렉션 대신 컬렉션 인터페이스를 사용하여 NHibernate가 자체 컬렉션 구현을 삽입 할 수 있도록합니다.

이 경우 IList<int>대신 사용하십시오.List<int>


1
감사합니다! 문제를 해결했습니다. 'NHibernate는 자체 컬렉션 구현으로 주입 할 수 있습니다.'라고 말씀하실 때 조금 더 자세히 설명 해주시겠습니까?
inutan

여기에 설명되어 있습니다. surcombe.com/nhibernate-1.2/api/html/…
Mauricio Scheffer

2
이 링크는 더 이상 존재하지 않습니다. 업데이트 된 내용이나 간단한 내용을 주시면 감사하겠습니다.
Noich 2011


2
죽은 링크에 대해 불평하는 스택 오버플로의 사람들이 혼란 스럽습니다. archive.org에 대해 들어 본 사람이 없습니까? web.archive.org/web/20091105034326/http://elliottjorgensen.com/…
Mauricio Scheffer

0

나는 사용 하지 않는 ICollection<T>곳에서 작동 한다는 것을 알았습니다 IList<T>.

저는 NHibernate 마법사는 아니지만이 문제에 착수 할 수있는 다른 사람에게 뼈를 던지고 싶었습니다.


컬렉션이 매핑되는 방식에 따라 다릅니다. 들어 bag당신이 사용할 수있는 IList<T>- 세트와ISet<T>
로마 Artiukhin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.