0

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

我知道 Fluent NHibernate 有一个新的 fluent 映射,它需要一个新的类来映射实体类将使用的字段。我想知道,如果映射类直接链接到实体类(它将为实体类精确映射),最佳实践是否规定它们不能在同一个 .cs 文件中加入?请注意,这里不会有嵌套。

即:有 Product 和 ProductMap 类,它们都用于我的数据库中的 Product 表,所以我会将这两个类放在同一个 Product.cs 中,如下所示:

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

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

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

提前致谢!

4

3 回答 3

1

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

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

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

于 2012-09-03T17:13:48.670 回答
1

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

这意味着你不应该Product派生自ClassMap<Product>. 但这也意味着ProductMap甚至不应该与您的实体在同一个项目中。

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

于 2012-09-03T17:14:23.393 回答
1

您可以将这两个类保存在不同的文件中,甚至在不同的命名空间中。但是如果您是初学者,那么您可以将实体类保存在不同的文件中,并将类映射到同一命名空间内的不同文件中。

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

/* ProductMap.cs */
namespace Business.Entity
{
    public class ProductMap : ClassMap<Product>
    {
    ...
    }
}
于 2012-09-04T17:34:15.100 回答