NHibernate映射到Table的两个版本

时间:2012-02-15 23:05:04

标签: nhibernate

我有一个有两个版本的表 例如 带有列的TableVersion1:A,B,C, 具有列的TableVersion2:A,B,C,D

如何编写适用于两个版本的表的实体?

2 个答案:

答案 0 :(得分:0)

也许这样的事情对你有用。这是流利的语法,但你明白了。这假设该表的两个版本都存在于同一个数据库中。如果他们不是,我不认为这可以做到。

public class TableVersionMap : ClassMap<TableVersion>
{
    public TableVersionMap()
    {
        Table("TableVersion1");
        Id(x => x.Id);
        Map(x => x.A);
        Map(x => x.B);
        Map(x => x.C);

       Join("TableVersion2", uc =>
       {
           uc.KeyColumn("Id");
           uc.Map(x => x.D);
       });
    }
}

答案 1 :(得分:0)

如果我理解正确,您希望将同一个类映射到两个不同的表。在这种情况下,您应该在映射中使用不同的实体名称。由于您还没有指定您的映射偏好设置,因此我会在我的示例中使用hbm。

<class entity-name="ArtistA" name="Artist" table="artist_a">
    <id name="Id" column="artist_a_id">
        <generator class="native" />
    </id>

    <property name="Name" column="artist_a_name" not-null="true" />
</class>

<class entity-name="ArtistB" name="Artist" table="artist_b">
    <id name="Id" column="artist_b_id">
        <generator class="native" />
    </id>

    <property name="Name" column="artist_b_name" not-null="true" />
</class>

请注意entity-name属性的存在。持久化实体时,应指定实体名称。

session.Save("ArtistA", new Artist { ... });