我有一个遗留数据库,它有大约10个相同的表(只有名称不同)。 是否有可能为所有表使用相同的业务实体而无需创建多个类/映射文件?
答案 0 :(得分:1)
您可以创建包含所有属性的基类,但仍需要将它们全部映射。
为此,您可以使用复制和粘贴,XML实体(请参阅http://nhibernate.info/doc/nh/en/index.html#inheritance-tableperconcreate-polymorphism上的检查)或基于代码的映射方法(Fluent或ConfORM)。它们通常使重用更容易。
答案 1 :(得分:1)
如果您使用的是NHibernate v2.1或更高版本,则可以使用实体名称功能。它记录不清,但我正在积极使用该功能。它很难找到它的文档,但请看这里:
中的第5.3节
http://docs.jboss.org/hibernate/core/3.2/reference/en/html/mapping.html#mapping-entityname
有几点需要注意。您现在必须使用entity-name而不是class name来引用对象。一般来说,从类名转移到实体名称并不是一个完全透明的变化。
会话操作现在需要两个参数,例如:
_session.Save(“MyEntity”,myobject)
entity-name控制数据进入的表。
有些HQL查询不再正常工作,有时您必须使用Criteria。
如果您需要一组示例代码,我可能会发布一些示例代码,但此刻太忙了。我建议您查看您可以找到的有限信息,并将其设置为一个非常简单的对象和多个表来了解它是如何工作的。它确实有效。