如果我有一个映射 id 的约定,这就是我通常使用 hilo 生成器对具有 int Id 列的 int Id 属性进行映射的方式:
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)时才会发生这种情况,我是否应该期望我不再能够覆盖映射并提供不同的生成器和类型,或者有什么在一般情况下,我可以做不同的事情来隐藏我想要做的覆盖吗?