NHibernate映射问题 - 奇怪的场景

时间:2009-11-06 11:09:48

标签: nhibernate mapping

我有一个有趣的场景,我有一个映射到实体的给定表。但是,该表的另一个版本将作为夜间进程的一部分进行填充,并且与第一个表具有完全相同的列。在没有得到太多细节的情况下,第二个表是一个“工作”表,其中包含一小部分记录。有一些奇怪的业务规则,其中插入只能在大表中完成,而读取/更新只能在较小的表上完成。

我该如何处理这个?换句话说,在相同的情况下,我希望CRUD操作使用一个映射,在其他情况下,我想使用另一个表。

4 个答案:

答案 0 :(得分:1)

您可以通过维护两个会话工厂来实现此目的,每个会话工厂将相同的实体映射到每个表,或者在单个会话工厂中使用两个不同的实体,每个实体(类)映射到它自己的表。

答案 1 :(得分:1)

我会将它作为两个独立的实体处理,并将它们分别映射到同一个表。如果您正在使用存储库,则可以强制执行以下规则:一个实体可以插入,另一个实体选择/更新。

答案 2 :(得分:1)

您还可以在加载/写入操作上设置不同的sql - 在这种情况下,您可以在进程中完全控制。

答案 3 :(得分:0)

创建两个实体,并将每个实体映射到它们自己的单独表。由于表是彼此的镜像,因此在整个应用程序中仅使用一个实体。当需要保存实体时,请检查IsNew标志。如果IsNew为真,那么只需保存(插入)。如果IsNew为false,则将值复制到辅助实体并保存(更新)该实体。这样您就不必担心在应用程序中传递两个不同的实体。阅读代码时应该避免混淆,因为您不必担心使用什么实体。