实体类中的流畅NHibernate映射类

时间:2012-09-03 17:07:10

标签: c# nhibernate fluent-nhibernate entity fluent-nhibernate-mapping

我正在研究Fluent NHibernate,并对映射有疑问。这不是问题,而是最佳实践问题。

我知道在Fluent NHibernate中有一个新的流畅映射,它需要一个新的Class来映射将由Entity Class使用的字段。我想知道,如果Mapping Class直接链接到Entity Class(它将为实体类进行exacly映射),那么最佳实践是否要求它们不能在同一个.cs文件中加入? 请注意,这里没有筑巢。

I.e。:我的数据库上的Product表都有Product和ProductMap类,所以我将这两个类放在同一个Product.cs中,如下所示:

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

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

如果这些类不应该在同一个文件中,你是否愿意解释原因,也许还有实例?

提前致谢!

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

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

通常,您将拥有一个包含映射的DAL项目以及包含该实体的域/业务项目

答案 2 :(得分:1)

您可以将这两个类保留在不同的文件中,即使在不同的命名空间中也是但如果你是初学者,那么你可以将实体类保存在不同的文件中,并将map类保存在同一名称空间内的不同文件中。

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

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