2

一般来说,我是 Fluent Nhibernate (FNH) 或 NHibernate (甚至是 ORM) 的新手。我有一个用于学习 FNH 的宠物项目,但我被困住了,这看起来像是一个设计问题。它是一个基本的图书馆管理系统,我有书籍、用户、booksize(!) 等对象。例如,我有一个 BookSize 类和它的管理器 BookSizesManager,其中包含 BookSize 对象的列表。谁能告诉我如何为他们两个创建 ClassMap,这样我的数据库(出于测试目的,比如 SQLite 数据库)将只有一个名为“BookSizes”的表,并列出 BookSizeManager 中的所有 BookSize 对象?

我目前的实现是遵循和有缺陷的,因为它产生了两个表 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 回答