映射领域对象到数据库
NHibernate给数据库提供了两种映射领域对象的方法:使用XML的HBMs 以及绘图属性。HBM-XML 文件的主要优点就是:在物理上,它们与它们描述的领域对象分离开来。这使得领域对象仍然是POCOs (清晰陈旧的C#对象),相对地,POCOs 遗忘了它们是怎样与数据库连接起来的。但是,保持映射信息与领域对象分离开来,也可以看成是HBMs 的缺点,因为它要求额外的努力,以此来保持HBMs 和它们映射类型之间的转换。(一些人讨厌用XML)映射属性,另一方面,与领域对象紧密地联系在一起,而且没有HBM 等同体那么冗长。使用映射属性使得领域对象比POCOs 更像Active Records(对于真的Active Records支持,考虑使用Castle Project's ActiveRecord)。
除了污染领域对象以外,映射属性要求与NHibernate.Mapping.Attributes 相关的参考,NHibernate.Mapping.Attributes 使领域层没有数据访问提供者。另一方面,你经常发现自己完全转换数据访问层吗?但是作为一个基本规则,领域层应该保持作为数据访问提供者,因为它对应用程序的设计目标很实在。当涉及到它时,决定使用HBMs 或者映射属性是个人爱好问题。当开始创建一个新的项目时,应该考虑使用哪种技术;混合技术可能会导致混淆,因为它可能不清楚哪个对象要映射,哪个对象不需要映射.在样本应用程序里没有找到下面的片断,展示了使用映射属性,而不是HBMs的例子。在NHibernate docs中能找到额外的与映射属性有关的信息。
[NHibernate.Mapping.Attributes.Class]
public class Customer
{
[NHibernate.Mapping.Attributes.Property]
public string FirstName { ... }
...
}