タイプ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;
    }
}

FluentHibernateを使用して次のようにマッピングされます。

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 2009年


2
このリンクはもう存在しません。更新されたものまたは簡単な内容をいただければ幸いです。
noich 2011


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>
ローマArtiukhin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.