NHibernate映射问题-奇怪的场景

NHibernate映射问题-奇怪的场景,nhibernate,mapping,Nhibernate,Mapping,我有一个有趣的场景,其中我有一个映射到实体的给定表。但是,该表还有另一个版本,它作为夜间进程的一部分填充,并且具有与第一个表完全相同的列。在不涉及太多细节的情况下,第二个表是一个包含一小部分记录的“工作”表。有一些奇怪的业务规则,插入只能在大表中进行,读取/更新只能在小表中进行 我如何处理映射?换句话说,在相同的情况下,我希望CRUD操作使用一个映射,在其他情况下,我希望使用另一个表。您可以通过维护两个会话工厂来实现这一点,每个会话工厂将相同的实体映射到每个表,或者在单个会话工厂中使用两个不同的

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


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

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

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

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

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

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

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

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

您还可以设置不同的sql加载/写入操作-在这种情况下,您拥有完整的过程之间的控制