2010-11-19 7 views
0

Derzeit bin ich mit dem folgenden Code-Basis-Typen mit Fluent NHibernate Automapping zu ignorieren:Gibt es eine Möglichkeit, einen Basistyp/eine Basisklasse im Fluent NHibernate automapping zu ignorieren?

AutoMap.AssemblyOf<Class1>(new MyDefaultAutomappingConfiguration()) 
      .Conventions.Setup(GetConventions()) 
      .IgnoreBase<MyCore.BaseTypes.AmazingBaseType>() 
      .IgnoreBase<MyCore.BaseTypes.AnotherAmazingBaseType>() 
      .UseOverridesFromAssemblyOf<AutoPersistenceModelGenerator>(); 

Gibt es eine Möglichkeit Basistypen von einem Namespace (dh MyCore.BaseTypes) anstelle des IgnoreBase() Methode zu verwenden, die ignorieren für jeder Basistyp den ich habe?

Ich habe versucht, dies mit meiner außer Kraft gesetzt ShouldMap(Type) Methode in DefaultAutomappingConfiguration -extended Klasse erreichen (das heißt MyDefaultAutomappingConfiguration), dies zu erreichen, aber es immer noch versucht, die Basistypen zuzuordnen:

public class MyDefaultAutomappingConfiguration: DefaultAutomappingConfiguration { 
    public override bool ShouldMap(Type type) { 
     return !IsBaseType(type); 
    } 

    private bool IsBaseType(Type type) { 
     return type.Namespace == typeof(MyCore.BaseTypes).Namespace; 
    } 
} 

Antwort

1

Was wie Ihr MyAutomappingConfiguration Aussehen tut? Sie können ShouldMap(Type) mit etwas außer Kraft setzen wie:

public override bool ShouldMap(System.Type type) 
{ 
    return 
    type.BaseType.Namespace == typeof (MyCore.BaseTypes.BaseIWant).Namespace; 
} 
1

Wenn Ihre Basistypen sind abstrakte sie wird nicht in der Abbildung enthalten sein.

+0

es scheint, wie es immer noch versucht, sie aus irgendeinem Grund zu kartieren, weil ich sie sehe zeigt in meine Konventionen up ... – gabe

+0

seltsam Das ist. Fluent Wiki sagt im Grunde, dass es nicht enthalten sein sollte, es sei denn, Sie sagen ausdrücklich, dass es enthalten sein soll. http://wiki.fluentnhibernate.org/Auto_mapping#Abstract_base-classes – Phill

1

Sie können es direkt in Ihrer Konfiguration wie folgt aus:

AutoMap.AssemblyOf<Class1>(new MyDefaultAutomappingConfiguration()) 
      .Conventions.Setup(GetConventions()) 
      .Where(t => t.Namespace != "MyCore.BaseTypes") 
      .UseOverridesFromAssemblyOf<AutoPersistenceModelGenerator>(); 
+0

also ist dies der einzige Weg, dies zu tun? – gabe

+0

Ich weiß nicht, ob es der einzige Weg ist, aber es ist die häufigste und einfachste Methode. Das benutze ich trotzdem :) – Variant

+0

ich markiere das ist wie die Antwort. Ich konnte die Änderung der Methode "ShouldMap()", die meine "AutomappingConfiguration" verwendet, nicht ausführen. – gabe