3

同じクラスの任意の数をContentItemsN2のページに追加できますか?そして、それらをネストできますか?

ContentItemsつまり、コレクションをN2のプロパティとして定義する方法はありますか?また、可能であればこれらをネストして、データに対してより意味のあるクエリを実行できるようにしたいと思います。EditableTextRegions(つまり、クエリが難しい巨大なものを使用する代わりに。)

私は現在、「理想的な」モデルとして次のモデルを持っていますが、これはN2化できますか?(わかりやすくするために、属性とN2スタイルのゲッター/セッターは省略しました)

public class Link : ContentItem
{
    public string Text { get; set; }
    public string Title { get; set; }
    public string Url { get; set; }
}

public class Panel : ContentItem
{
    public string Title { get; set; }
    public string Text { get; set; }
    public List<Link> Links { get; set; } // Should show an expandable number of “Link” editors in the CMS editor
    public string ImageUrl { get; set; }
}

public class Page : ContentItem
{
    public string Title { get; set; }
    public string BodyText { get; set; }
    public List<Panel> Panels { get; set; } // Should show an expandable number of “Panel” editors in the CMS editor
}
4

1 に答える 1

4

はい - プロパティで Get/SetDetail の代わりに Get/SetDetailCollection を使用します。

参考までに、2.1 を使用している場合は、プロパティvirtualを作成して Get/SetDetail を省略できます。ただし、これが DetailCollection メソッドで機能するかどうかはわかりませんが、2 つを混在させることができます。

ただし、あなたが提案していることには注意してください。このようなコレクションをネストすると、後で SELECT N+1の問題が発生する可能性があります。設計を変更できない場合は、N2 のデータベース キャッシング (NHibernate の第 2 レベルのキャッシュにすぎません) を有効にすることをお勧めします。これにより、データベースにあまりアクセスすることなく、できるだけ多くのデータがメモリに保持されます。

于 2011-01-12T08:56:46.750 に答える