2

私は一般的にFluentNhibernate(FNH)またはNHibernate(またはORM)の初心者です。私はFNHを学ぶために使用しているペットのプロジェクトを持っていますが、デザインの問題のように見えます。その基本的なライブラリ管理システムであり、books、users、booksize(!)などのオブジェクトがあります。たとえば、BookSizeクラスとそのマネージャーBookSizesManagerがあり、BookSizeオブジェクトのリストを保持しています。私のデータベース(テスト目的で、SQLiteデータベースなど)に「BookSizes」というテーブルが1つだけあり、BookSizeManagerにすべてのBookSizeオブジェクトが一覧表示されるように、両方のClassMapを作成する方法を教えてください。

私の現在の実装は、2つのテーブル1. BookSize 2. BookSizes(BookSizeManager Mapから)を生成するのと同じように、欠陥があります。

私のBookSizeクラス

public class BookSize
{
    public virtual string ID { get; set; }
    public virtual string Name { get; set; }
    public virtual double Length { get; set; }
    public virtual double Width { get; set; }
}

対応するClassMap

public class BookSizeMap : ClassMap<BookSize>
{
    public BookSizeMap()
    {
        Id(x => x.ID);
        Map(x => x.Name);
        Map(x => x.Length);
        Map(x => x.Width);
    }
}

私のBookSizesManagerクラス

public class BookSizesManager
{
    public virtual string Id { get; set; }

    private IList<BookSize> m_bookSizes = new List<BookSize>();
    public virtual IList<BookSize> Items
    {
        get { return new ReadOnlyCollection<BookSize>(m_bookSizes); } 
        set { if(value != null) m_bookSizes = value; }
    }

    public virtual void Add(BookSize size)
    {
        if (size != null)
        {
            m_bookSizes.Add(size); 
        }
    }// Also contains other unimplemented CRUD methods, but haven't listed them here to reduce 'noise'
}

対応するClassMap

public class BookSizesManagerMap : ClassMap<BookSizesManager>
{
    public BookSizesManagerMap()
    {
        Id(x => x.Id);
        HasMany(x => x.Items)
            .Cascade.All();
        Table("BookSizes");
    }
}

どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

0

私は完全に取り除きBookSizesManager、セッションを直接使用し、テーブル名を明示的に指定します

public class BookSizeMap : ClassMap<BookSize>
{
    public BookSizeMap()
    {
        Table("BookSizes");
        ...
    }
}

BookSizesManager.Add(booksize);なるsession.Save(booksize); BookSizesManager.Get(booksizeId);_session.Get(booksizeId);

于 2012-11-07T08:52:57.573 に答える