在引用上设置CustomSqlType

时间:2011-01-03 22:16:14

标签: nhibernate fluent-nhibernate nhibernate-mapping

我的情况是我的主键是SqlServer 2008中的char(2),我想以一对多关系引用它,但是ManyToOneBuilder(由ClassMap返回<> .References ())没有CustomSqlType()方法。具体做法是:

public class State
{
    // state FIPS code is 2 characters
    public virtual string StateCode { get; set; }
    public virtual ICollection<County> { get; set; }
}

public class County
{
    // state-county FIPS code is 5 characters
    public virtual string StateCountyCode { get; set; }
    public virtual State State { get; set; }
}
public class StateMap : ClassMap<State>
{
    public StateMap()
    {
        Id(e => e.StateCode).CustomSqlType("char(2)").GeneratedBy.Assigned();
    }
}

public class CountyMap : ClassMap<County>
{
    public CountyMap()
    {
        Id(e => e.StateCountyCode).CustomSqlType("char(5)").GeneratedBy.Assigned();
        References(e => e.State, "StateCode")
        // Here's what I want to do, but can't because the method is not 
        // implemented on the class ManyToOneBuilder:
            .CustomSqlType("char(2)");
    }
}

有没有办法在不修改ManyToOneBuilder的情况下完成此任务?有没有办法自动将FK(即County.StateCode)映射到正确的类型?将CustomSqlType添加到ManyToOneBuilder是微不足道的,但这是正确的做法吗?

2 个答案:

答案 0 :(得分:1)

保持映射定义不变,添加&#34;状态&#34;列定义

.CustomSqlType("char(2)")

并为此列设置Insert = false和update = false。

我遇到了同样的问题,在AutoMapping中我使用了这段代码:

mapping.Map(x => x.IdUniArticolo)
     .CustomSqlType("varchar(50)")
     .Not.Insert().Not.Update();

mapping.References(x => x.Articolo)
     .Column("IdUniArticolo").PropertyRef("IdUniArticolo");

答案 1 :(得分:0)

请记住,如果NHibernate本身不支持它,那么Fluent NHibernate不能,而且我不支持NHibernate支持你的场景。我有一个类似的问题,因为我在一个表和其中一个字段上有一个2列复合键,我想使用一个枚举类型,它有一个自定义IUserType将它转换为DB中适当的代码值。无法做到这一点,所以我坚持保留字符串类型的属性而不是枚举类型。