Fluent nHibernate:如何设置id约定,以便覆盖在具有不同id的表上工作

时间:2016-01-08 17:50:37

标签: fluent-nhibernate fluent-nhibernate-mapping

遗留数据库的奇怪案例: 大多数表都具有相同的主键命名字段,但我有一个表具有不同的主键,但也有该命名字段。当我覆盖此表的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()来覆盖约定,但似乎没有。

我在这里缺少什么?因为我宁愿修复约定而不是为异常显式覆盖它。

0 个答案:

没有答案