2

我是一个通用的流利Nhibernate(FNH)或NHibernate(甚至ORMs)的新手。我有一个我用来学习FNH的项目,而且我坚持着,看起来像是一个设计问题。它是一个基本的图书馆管理系统,我有书籍,用户,书籍(!)等对象。例如,我有一个BookSize类和它的经理BookSizesManager,其中包含BookSize对象列表。可以请任何人建议我如何去为他们创建ClassMap,这样我的数据库(用于测试目的,比如SQLite数据库)只有一个名为'BookSizes'的表,并且会列出BookSizeManager中的所有BookSize对象?流利的NHibernate流利的映射对象和对象集合

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

我的书本类

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

通讯类映射

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' 
} 

通讯类映射

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

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

+0

任何人都可以请帮助?!?! – Kunal

+0

Stackoverflow死了吗? – Kunal

+0

除了CRUD,“BookSizesManager”是做什么的?我的意思是当使用NHibernate时,你已经有'ISession'来完成CRUD – Firo

回答

0

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

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

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

+0

我在考虑让更多的“经理”来做所有的CRUD操作。因此,在应用程序中“易于访问”,而不是使用FNH查询它,每次我需要它时都可以访问。我不确定我是否在这里设计原则的正确方面。请原谅我的无知并引导我。再次感谢您的回答! – Kunal

+0

听起来像是一个缓存或一些经常在内存中需要的数据,没有什么必须坚持。如果没有什么必须持久化,那么也应该去掉NHibernate,并在集合上使用LINQ。如果你需要一个桌面应用程序的指导,我会建议http://msdn.microsoft.com/en-us/magazine/ee819139.aspx – Firo

+0

好的。说得通。我确实希望书籍等得到坚持。但之后也听说过有能力缓存事物的ORM。另外,这些查询是否足够高效,即比使用LINQtoSQL直接查询数据库更好?感谢你对我的天真耐心。 – Kunal