NHibernate:一个基类,几个映射

ano*_*ous 6 c# oop nhibernate nhibernate-mapping

我对NHibernate相对比较新,但是我已经将它用于最后几个程序而且我很喜欢.我遇到了需要将4-5个数据库中的数据聚合到一个数据库中的情况.具体来说,它是序列号数据.每个数据库都有自己的映射文件,但最终实体都共享相同的基本结构(Serial类).

我理解NHibernate希望每个类都有一个映射,所以我最初的想法是拥有一个基本的Serial Class,然后为每个不同的数据库继承它,并创建一个唯一的映射文件(继承的类将没有内容).这应该非常适合抓取所有数据并填充对象.我想要做的是使用基类映射将这些继承的类(不确定正确的术语是什么)保存到基类表中.

问题是我不知道如何强制NHIbernate为对象使用特定的映射文件.使用'session.save()'时,将继承的类转换为基类没有任何作用(它抱怨没有映射).

有没有办法明确指定使用哪个映射?或者是否只有一些OOP主体我缺少更具体地将继承的类转换为基类?或者这个想法是个坏主意.

关于NHibernate(第8章)我可以找到的所有继承内容似乎都不完全适用于这个函数,但我可能是错的(每个具体类的表看起来可能有用,但我可以'关于NHibernate如何确定要做什么,完全包围我的头.

Pau*_*ier 4

我不知道这是否有帮助,但基本上我不会尝试这样做。

从本质上讲,我认为您可能患有“金锤子”综合症:当您有一把非常非常好的锤子(即 Hibernate (我同意您对它的看法;它是一个很棒的工具))时,所有东西看起来都像钉子。

我通常会尝试简单地拥有一个“手动转换”类,即具有构造函数的类,该构造函数为您的各个串行类采用休眠类,并且只需将数据复制为其自己的特定格式;然后 Hibernate 可以使用自己的映射简单地将其序列化到(单个)数据库。

实际上,我认为这是一个更好的解决方案的原因是,您实际上正在尝试做的是在您的类中进行非对称序列化;即从派生类中的一个数据库读取,写入基类中的另一个数据库。实际上,这并没有什么太可怕的,只是它从根本上来说是一个单向的过程。如果您确实想要从一个数据库转换为另一种数据库,只需进行转换即可。