NHibernate映射-一个映射文件和c#类中的2个逻辑表中的2个不同的列
本文关键字:2个 映射 文件 一个 NHibernate | 更新日期: 2023-09-27 18:17:01
我有一个问题,我甚至找不到正确的谷歌关键字。
有2个数据库。在第一个示例中,有一个名为"Item"的表,包含两列"DescriptionA"、"DescriptionB"。在第二个数据库中,我也有一个名为"Item"的表,但列名略有不同,我们说:"Description_A"answers"Description_B"。
我的问题是:是否有可能在一个映射文件和一个c#类中创建一个hibernate映射?例如,一个映射反应像"如果我找不到列DescriptionA,那么我将只是读/写列Description_A!"?
我不想做的是创建两个映射类和c#类,因为这意味着创建两个非常相似的c#类和映射文件,这会导致非常大的代码冗余。
解决这个问题的最好方法是什么?
解决方案,内置NHibernate,是ISessionFactory
配置。必须映射所有不同的实体两次,但在运行时只使用一个映射-每个连接字符串。
因为,如上所述,我们正在讨论2 DB。这意味着,我们将需要2 nhibernate ISession
工厂,其中(它们中的每个)将通过不同的connection strings
与这些DB中的一个交互。
因此,我们将为每个应用程序提供不同的配置,如这里所示:
- 1.1。NHibernate入门
第一个可以像这样:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.connection_string">Server=DB1...
...
<mapping assembly="MyProject.Data" />
<mapping assembly="MyProject.DataForDB1" />
</session-factory>
而第二个则有这样的配置
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.connection_string">Server=DB2...
...
<mapping assembly="MyProject.Data" />
<mapping assembly="MyProject.DataForDB2" />
</session-factory>
区别不仅在于连接字符串…还包括映射文件 Embedded Resources
的信息(MyProject。数据可以包含两个模式相同的.hbm.xml
文件)
Data
项目/库,
- 与DB1模式和 的映射
- 具有DB2模式映射的
c# 实体以及任何业务逻辑将被共享。甚至一些DAO对象也可以被共享…只是每个DB交互将使用不同的映射
重要提示:不要忘记将任何.hbm.xml
文件标记为嵌入式资源 -每个文件