如果我有一个映射id的约定,那就是我通常使用int Id列在int Id属性上使用hilo generatior的映射:
public class IdConvention : IIdConvention
{
private const int HiLoRange = short.MaxValue;
public void Apply(IIdentityInstance instance)
{
instance.Column(instance.EntityType.Name + "Id");
instance.GeneratedBy.HiLo(HiLoRange.ToString());
}
}
但是我有一个我想要以不同方式映射的类,而是使用指定的字符串作为Id,我使用覆盖:
public class SomeClassMapping : IAutoMappingOverride<SomeClass>
{
public void Override(AutoMapping<SomeClass> mapping)
{
mapping.Id(instance => instance.StringProperty).GeneratedBy.Assigned().Column("StringProperty");
}
}
这适用于旧版本的FluentNHibernate / NHibernate,但是当我更新到1.3.0.733/3.3.2.4000时,我现在成为未处理异常的受害者:
System.InvalidOperationException:标识类型必须是整数(int,long,uint,ulong)
只有在我尝试使用字符串(或其他非整数属性作为Id)时,才会发生这种情况,我希望我不再能够覆盖映射并提供不同的生成器和类型,或者有什么我可以做的不同,使覆盖隐藏,我想在一般情况下做hilo?
答案 0 :(得分:3)
看起来执行顺序发生了变化。
是一个简单的解决方法public void Apply(IIdentityInstance instance)
{
if (instance.Type == typeof(int))
{
instance.Column(instance.EntityType.Name + "Id");
instance.GeneratedBy.HiLo(HiLoRange.ToString());
}
}