我的情况是我的主键是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是微不足道的,但这是正确的做法吗?
答案 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中适当的代码值。无法做到这一点,所以我坚持保留字符串类型的属性而不是枚举类型。