0

我似乎无法运行 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 时也是如此。我如何让它运行?

4

1 回答 1

2

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

更新:

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

  • 让 FooOverride 为每个实现 IFoo 的类实现几个 IAuotMappingOverride<>
  • 使用反射自己添加覆盖。未测试:

    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(...)));
        }
    }
    
于 2012-05-31T13:25:05.337 回答