遗留数据库的奇怪案例: 大多数表都具有相同的主键命名字段,但我有一个表具有不同的主键,但也有该命名字段。当我覆盖此表的automap时,它使用约定而不是覆盖,除非我显式覆盖name字段的映射。
public class IdConvention : IIdConvention, IIdConventionAcceptance,
{
public void Accept(IAcceptanceCriteria<IIdentityInspector> criteria)
{
criteria.Expect(x => x.Type == typeof(string));
}
public void Apply(IIdentityInstance instance)
{
if (instance.Name == "StandardId")
instance.Column("FooBarThingyId");
}
}
public class WierdCase
{
virtual int CustomId {get;set;}
virtual int StandardId {get;set;}
}
public class WierdCaseOverride : IAutoMappingOverride<WierdCase>
{
public void Override(AutoMapping<WierdCase> mapping)
{
mapping.Id(x => x.CustomId).GeneratedBy.Identity();
mapping.Map(x => x.StandardId , "FooBarThingyId");
}
}
public class CustomConfiguration : DefaultAutomappingConfiguration
{
public override bool IsId(Member member)
{
if (member.DeclaringType.GetProperty("StandardId") != null)
return member.Name == "StandardId";
return base.IsId(member);
}
}
如果没有mapping.Map()行,则使用StandardId作为键,而不是CustomId。我希望调用mapping.Id()来覆盖约定,但似乎没有。
我在这里缺少什么?因为我宁愿修复约定而不是为异常显式覆盖它。