Fluent nhibernate 传统表的Fluent nhiberante映射

Fluent nhibernate 传统表的Fluent nhiberante映射,fluent-nhibernate,fluent-nhibernate-mapping,legacy-database,Fluent Nhibernate,Fluent Nhibernate Mapping,Legacy Database,如何为遗留表定义fluent nhibernate映射 我有四张桌子 CTType(idGUID,Namevarchar(100),DateOFbirthdatetime) CTType_Legacy(idGUID,CTType_Legacy_ididentity int) CTTypeMap(idGUID,createdOndatetime,CtType\u idGUID) CTTypeMap_遗留(idGUID,CT_-Type_-idint) 信息 前两个表固定了50条记录。当为客户机配

如何为遗留表定义fluent nhibernate映射

我有四张桌子

  • CTType(idGUID,Namevarchar(100),DateOFbirthdatetime)
  • CTType_Legacy(idGUID,CTType_Legacy_ididentity int)
  • CTTypeMap(idGUID,createdOndatetime,CtType\u idGUID)
  • CTTypeMap_遗留(idGUID,CT_-Type_-idint)
  • 信息

    • 前两个表固定了50条记录。当为客户机配置数据库时,将首次填充这些表
    • 对于前两个表,ID是映射列(主forign键)
    • 最后两个表CtType_id映射到CtType表的id列
    当用户保存新的CTTypeMapObject时,它会从UI将记录插入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
            });
        }
    }
    
    公共类CTTypeMapMap:Enity
    {
    公共CTTypeMapMap()
    {
    Id(x=>x.Id);
    Map(x=>x.createdOn);
    参考文献(x=x.CtType);
    Join(“CTTypeMap_Legacy”,Join=>
    {
    join.KeyColumn(“Id”);
    join.Map(x=>x.CTTypeMap.Column(“CT_Type_id”);//不工作
    });
    }
    }
    
    CTTypeMap\u Legacy的列CT\u Type\u id的值应为CTType\u Legacy\u id的列值。我无法将正确的值插入表CTTypeMap\u LegacyCT\u Type\u id


    有人能告诉我如何在注释突出显示的行上进行映射吗?

    不清楚您在哪里设置值,但我猜您的意思是

    join.References(x => x.CTType_Legacy).Column("CT_Type_id");
    
    更新:以下diables延迟加载

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

    join.Map(x=>FakeProperty.Column(“CT_Type_id”).Access.Using();
    //在伊格特
    公共对象Get(对象obj)
    {
    return((CTTypeMap)obj.CTType.LegacyId;
    }
    
    表CTType_Legacy和CTTypeMap_Legacy在c#中没有定义为实体类,因此您可以看到mappind被定义为Join(“CTTypeMap_Legacy”,Join=>)因此,上述解决方案将不起作用。当使用通过脚本设置的初始化数据运行数据库时,表CTType和CTType_legacy已经填充。因此,只需根据用户在UI上的操作填充其他两个表。您的解决方案,即join.References(x=>x.CTType).Column(“CT_Type_id”).PropertyRef(“CTType_legacy_id”);未获取需要插入到CTTypeMap_旧版表的CT_类型_id列中的表CTType_旧版的CTType_旧版id。它假定您从数据库中引用了CTType。尽管如此,你仍然不见踪影。发布插入代码以及您期望生成的sql。
    join.Map(x => FakeProperty).Column("CT_Type_id").Access.Using<MyPropertyAccessor>();
    
    // in Igetter
    public object Get(object obj)
    {
        return ((CTTypeMap)obj).CTType.LegacyId;
    }