传统表的流畅的nhibernate映射

时间:2012-08-23 04:02:48

标签: fluent-nhibernate fluent-nhibernate-mapping legacy-database

如何为Legacy表定义流畅的nhibernate映射。

我有四张桌子

  1. CTType( id GUID,名称 varchar(100), Dateofbirth datetime)
  2. CTType_Legacy( id GUID, CTType_Legacy_id identity int)
  3. CTTypeMap( id GUID, createdOn 日期时间, CtType_id guid)
  4. CTTypeMap_Legacy( id GUID, CT_Type_id int)
  5. 信息

    • 前两张表修复了50条记录。在为客户端配置数据库时,首次填充这些表。
    • 前两个表ID是映射列(primary-forign key)。
    • 最后两个表CtType_id映射到CTType表的Id列

    当UI用户保存新的CTTypeMapObject时,它会将记录插入到CTTypeMap表中。映射定义为:

    public class CTTypeMapMap :Enity<CTTypeMap>
    {
        Public CTTypeMapMap()
        {
            Id(x => x.ID);
            Map(x => x.createdOn);
            References(x = x.CtType);
    
            Join("CTTypeMap_Legacy", join =>
            {
                join.KeyColumn("Id");
                join.Map(x => x.CTTypeMap).Column("CT_Type_id");  //not working
            });
        }
    }
    

    CTTypeMap_Legacy CT_Type_id 列的值应为 CTType_Legacy_id CTType_Legacy 的列值。我无法将正确的值插入表 CTTypeMap_Legacy CT_Type_id

    有人可以让我知道如何在注释中突出显示的行上进行映射吗?

1 个答案:

答案 0 :(得分:0)

目前尚不清楚您设置值的位置,但我猜您的意思是

join.References(x => x.CTType_Legacy).Column("CT_Type_id");

更新:以下diables lazy-loading

join.References(x => x.CTType).Column("CT_Type_id").PropertyRef("CTType_Legacy_id");

join.Map(x => FakeProperty).Column("CT_Type_id").Access.Using<MyPropertyAccessor>();

// in Igetter
public object Get(object obj)
{
    return ((CTTypeMap)obj).CTType.LegacyId;
}