在Fluent NHibernate映射中控制外键数据类型

时间:2015-04-28 22:48:10

标签: nhibernate fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping

我有一个Fluent NHibernate配置,它与两个不同的模式交互 - 一个由FNH生成的新数据库和一个遗留数据库。我使用AutoMapping with Overrides。新数据库中的一个表有一个外键列,它引用了旧数据库中的PK。遗留数据库中的有问题的PK是char(10)类型。我似乎无法找到一种方法来声明新数据库中的FK列也应该是同一类型 - 它默认为nvarchar(255)

我可以在构建之后手动更改生成的数据库中列的类型,但我希望它构建我期望开始的方式。

以下是一些相关的代码片段(已经简化)

public class SalesOrder
{
    public virtual int Id { get; set; }
    public virtual AccountingSalesOrder AccountingSalesOrder { get; set; }

    public class SalesOrderMappingOverride : IAutoMappingOverride<SalesOrder>
    {
        public void Override(AutoMapping<SalesOrder> m)
        {
            m.References(x => x.AccountingSalesOrder).Column("csono")
            // #### I would like to use 'CustomSqlType("char(10)")' here,
            // but no such method exists
            ;
        }
    }

}

public class AccountingSalesOrder
{
    public virtual string SalesOrderNumber { get; set; }
    public virtual char RevisionNumber { get; set; }
}

public class AccountingSalesOrderOverride : IAutoMappingOverride<AccountingSalesOrder>
{
    public void Override(AutoMapping<AccountingSalesOrder> m)
    {
        m.SchemaAction.None();
        m.Schema(PersistenceInfo.AccountingSchema);
        m.Table("sosord");
        m.Id(x => x.SalesOrderNumber)
            .Column("csono")
            .CustomType<PaddedStringL10UserType>()
            // #### declaring 'CustomSqlType("char(10)")' here does not
            // change the result
            ;
        m.Map(x => x.RevisionNumber).Column("crevision");
    }
}

0 个答案:

没有答案