0

我正在学习流利的NHibernate,并且有一个关于映射的问题。这不是一个问题,而是一个最佳实践问题。实体类中流利的NHibernate映射类

我知道,与流利的NHibernate有一个新的流利的映射,它需要一个新的类映射字段将由实体类使用。我想知道,如果Mapping类直接链接到实体类(它将映射到实体类的exacly),那么最佳实践是否指示它们不能在同一个.cs文件中加入? 请注意,这里不会嵌套。

即:有产品和ProductMap类,无论是对我的数据库产品表,所以我把同Product.cs内的两个类,如下所示:

namespace Business.Entity 
{ 
    public class Product 
    { 
     ... 
    } 

    public class ProductMap : ClassMap<Product> 
    { 
     ... 
    } 
} 

如果类不应该在同一个文件中,你是否想解释为什么,并且可能有真实的例子?

在此先感谢!

回答

1

创建SessionFactory实例时,您将传递一个类,该类告诉哪个程序集具有映射定义。然后,使用反射,它将遍历该组件上的所有继承自ClassMap<T>的类。

也就是说,为了更快的初始化,最好让这个程序集尽可能轻,并且这意味着最好有一个只包含映射而不包含类定义的程序集。

AFAIK这是唯一的区别。任何反馈将不胜感激。

1

你应该尽可能地设计你的实体持续无知。

这意味着你不应该使Product派生自ClassMap<Product>。但这也意味着ProductMap甚至不应该与您的实体位于相同的项目中。

通常情况下,你将有一个包含地图和包含实体

+0

我熟悉这个DAL /业务层次感,而且更有意义,把DAL层内的映射,甚至分离cosnidering通过@安德烈 - Calil提供 –

+0

'答案Product'不会从“ClassMap ”继承而来,没有任何意义。这里的要点是映射类的放置位置。看起来我们都同意他们应该在专属的类库上。 –

1

你可以把两类不同的文件中,甚至在不同的命名空间域/业务项目DAL项目。但如果你是初学者,那么你可以在同一个命名空间内的不同文件中保存实体类并将其映射到不同文件中。

/* Product.cs */ 
namespace Business.Entity 
{ 
    public class Product 
    { 
    ... 
    } 
} 

/* ProductMap.cs */ 
namespace Business.Entity 
{ 
    public class ProductMap : ClassMap<Product> 
    { 
    ... 
    } 
}