【问题标题】:NHibernate Mapping - 2 different columns in 2 logical tables in one mapping file and c# classNHibernate 映射 - 一个映射文件和 c# 类中的 2 个逻辑表中的 2 个不同列
【发布时间】:2014-10-01 21:31:05
【问题描述】:

我有一个问题,我什至找不到正确的谷歌关键字。

有 2 个数据库。在第一个中,有一个表“Item”,其中包含 2 列“DescriptionA”、“DescriptionB”。在第二个数据库中,我还有一个名为“Item”的表,但列名略有不同,比如说:“Description_A”和“Description_B”。

我的问题是:是否可以仅在一个映射文件和一个 c#-class 中创建休眠映射?例如,一个映射的反应类似于“如果我找不到列 DescriptionA,那么我将只读取/写入列 Description_A!”?

我不想做的是创建 2 个映射和 c# 类,因为这意味着 2 创建 2 个非常相似的 c#-classes 和映射文件,这会导致非常大的代码冗余。

解决此类问题的最佳方法是什么?

【问题讨论】:

  • 我也会接受以一个 c# 类和 2 个或多个休眠映射文件结尾的解决方案。目的是避免 C# 代码中的冗余。

标签: c# nhibernate mapping multiple-columns


【解决方案1】:

内置 NHibernate 的解决方案是 ISessionFactory 配置。我们将必须将所有不同的实体映射两次,但在运行时只使用一个映射 - 每个连接字符串。

因为,如上所述,我们正在讨论 2 DB。这意味着,我们将需要 2 NHiberante ISession 工厂,(每个) 将通过不同的 connection strings 与其中一个 DB 进行交互。

因此,我们将为每个应用程序提供不同的配置,如下文所述:

第一个可能如下所示:

<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.Data 可以包含那些.hbm.xml 文件两种模式相同)

也就是说,我们需要两个 Data 项目/库,

  1. 一个用于 DB1 模式的映射和
  2. 具有 DB2 模式映射的一个

C# Entities 以及任何 业务逻辑 将被共享。甚至一些 DAO 对象也可以共享...只是每个 DB 交互将使用不同的映射

基本说明:不要忘记将任何.hbm.xml 文件标记为嵌入式资源 - 每个文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 2014-06-07
    相关资源
    最近更新 更多