IAutoMappingOverride.Override未被调用

时间:2012-05-29 14:45:14

标签: c# nhibernate fluent-nhibernate

我似乎无法运行FluentNHibernate覆盖。这是我的配置方法

private static void Configure()
{
    if (_configuration != null) return;

    _configuration = new Configuration();
    _configuration.Configure();
    _configuration
        .AddAssembly(typeof(IFoo).Assembly)
        .AddAssembly(OtherDataAssembly);
    var autoPersistenceModel = AutoMap
        .AssemblyOf<IFoo>()
        .AddEntityAssembly(OtherDataAssembly)
        .Conventions.AddAssembly(OtherDataAssembly)
        .Conventions.Add(DefaultCascade.None())
        .UseOverridesFromAssemblyOf<IFoo>()
        .UseOverridesFromAssembly(OtherDataAssembly)
        .OverrideAll(map => map.IgnoreProperty("IsIgnored"))
        .Where(IsTypeMatch);
    _sessionFactory = Fluently
        .Configure(Configuration)
        .Mappings(m => m.AutoMappings
            .Add(autoPersistenceModel))
        .BuildSessionFactory();
}

这是我的覆盖类

public class FooOverride : IAutoMappingOverride<IFoo>
{
    public void Override(AutoMapping<IFoo> mapping)
    {
        mapping.Not.LazyLoad();
        mapping.HasManyToMany(x => x.Bar).Table("FooBar");
    }
}    

调试时,我在Override()方法中放置的断点永远不会被命中,即使重新启动IIS也是如此。我如何让它运行?

1 个答案:

答案 0 :(得分:2)

覆盖仅在完全相同的类上运行,而不是在IAutoMappingOverride的泛型类型参数中可分配给类的类。

更新

我现在能想到的唯一其他选择是:

  • 让FooOverride实现几个IAuotMappingOverride&lt;&gt;对于实现IFoo的每个类
  • 使用Reflection自己添加覆盖。 untestet:

    var overrideMethod = typeof(AutoPersistenceModel).GetMethod("Override");
    
    foreach (var type in typeof(IFoo).Assembly)
    {
        if (typeof(IFoo).IsAssignableFrom(type))
        {
            overrideMethod.MakeGenericMethod(type).Invoke(new Action<IFoo>(m => m.HasMayToMany(...)));
        }
    }