我正在研究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>
{
...
}
}
如果这些类不应该在同一个文件中,你是否愿意解释原因,也许还有实例?
提前致谢!
答案 0 :(得分:1)
创建SessionFactory
实例时,您将传递一个类,该类告知哪个程序集具有映射定义。然后,使用反射,它将遍历继承自ClassMap<T>
的此程序集上的所有类。
也就是说,为了更快地进行初始化,最好让这个程序集尽可能轻,这意味着拥有一个只包含映射而不是类定义的程序集会更好。
AFAIK 这是唯一的区别。任何反馈将不胜感激。
答案 1 :(得分:1)
你应该尽可能地设计你的实体无知。
这意味着您不应该Product
从ClassMap<Product>
派生。但这也意味着ProductMap
甚至不应与您的实体位于同一项目中。
通常,您将拥有一个包含映射的DAL项目以及包含该实体的域/业务项目
答案 2 :(得分:1)
您可以将这两个类保留在不同的文件中,即使在不同的命名空间中也是但如果你是初学者,那么你可以将实体类保存在不同的文件中,并将map类保存在同一名称空间内的不同文件中。
/* Product.cs */
namespace Business.Entity
{
public class Product
{
...
}
}
/* ProductMap.cs */
namespace Business.Entity
{
public class ProductMap : ClassMap<Product>
{
...
}
}