流畅的NHibernate流畅的映射对象和对象的集合

时间:2012-11-04 00:27:39

标签: collections fluent-nhibernate fluent-nhibernate-mapping

我是Fluent Nhibernate(FNH)或NHibernate(甚至是ORM)的新手。我有一个宠物项目,我正在用它来学习FNH,我一直坚持,看起来像一个设计问题。它是一个基本的图书馆管理系统,我有书籍,用户,书本(!)等对象。例如,我有一个BookSize类及其管理器BookSizesManager,它包含一个BookSize对象列表。可以请任何人建议我如何为它们创建ClassMap,以便我的数据库(用于测试目的,比如一个SQLite数据库)只有一个名为'BookSizes'的表,并列出BookSizeManager中的所有BookSize对象?

我当前的实现如下并且有缺陷,因为它产生两个表1. BookSize 2. BookSizes(来自BookSizeManager Map)。

My BookSize Class

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

非常感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我将完全摆脱BookSizesManager并直接使用会话并明确指定表名

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

BookSizesManager.Add(booksize);变为session.Save(booksize); BookSizesManager.Get(booksizeId);变为session.Get(booksizeId);