我是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");
}
}
非常感谢任何帮助。提前谢谢。
答案 0 :(得分:0)
我将完全摆脱BookSizesManager
并直接使用会话并明确指定表名
public class BookSizeMap : ClassMap<BookSize>
{
public BookSizeMap()
{
Table("BookSizes");
...
}
}
BookSizesManager.Add(booksize);
变为session.Save(booksize);
BookSizesManager.Get(booksizeId);
变为session.Get(booksizeId);