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 に答える