2010-12-02 2 views
0

ich bin Automapping mit fließend nHibernate verwenden, sehr einfach, etwa so:autopmapping mit UseOverridesFromAssemblyOf stellt nicht überwiegende Klasse von Basisklasse

Fluently.Configure() 
      .Database(MsSqlConfiguration.MsSql2008 
      .ConnectionString(c => c 
       .Server("(local)\\sql2008") 
       .Database("nHibernate_test") 
       .TrustedConnection())) 
      .Mappings(m => m.AutoMappings.Add(
       AutoMap.AssemblyOf<Domain.Airport>(cfg) 
       .UseOverridesFromAssemblyOf<ReaderMappingOverride>() 
       )) 

meiner vorrangigen Klassen so etwas sind:

public class ReaderMappingOverride : IAutoMappingOverride<Domain.Reader> 
{ 
    public void Override(AutoMapping<Domain.Reader> mapping) 
    { 
     //use the reader ID as identifier of the class, instead of the ID field defined in superclass Entity 
     mapping.IgnoreProperty(r => r.Id); 
     mapping.Id(r => r.ReaderNumber); 
    } 
} 

wobei Reader eine abstrakte Basisklasse ist. Wenn ich eine separate Klasse für jede Unterklasse verwenden, funktioniert es OK. Gibt es eine Möglichkeit, das Überschreiben für alle Unterklassen der abstrakten Klasse zu definieren?

Dank,
Jhonny

Antwort

0

ok, antwortete nur meine eigene Frage- mein Problem war, dass ich eine Hierarchie abzubilden versuchte, die mit der Reader-Klasse gestartet, in einer einzigen Tabelle. Auto-Mapping ignoriert jedoch automatisch alle abstrakten Klassen. was ich tat, war dies nur auf den Abschnitt Konfiguration hinzuzufügen:

.Mappings(m => m.AutoMappings.Add(
       AutoMap.AssemblyOf<Domain.Airport>(cfg) 
       .IncludeBase<Domain.Reader>() 

und diese auf meine Konfigurationsklasse

public override bool IsDiscriminated(Type type) 
    { 
     //this line indicates that the readers heirarchy should be all in one table, instead of seperate tables for every type of reader 
     bool ret = type.IsSubclassOf(typeof(Domain.Reader)) || type == typeof(Domain.Reader) ; 
     return ret; 
    } 

(BTW, verwendet das Beispiel gegeben in Fluent nHibernate Website der Methode „type.In (... "das existiert nicht in .net 3.5 ...)
das hat gut funktioniert.
hofft das hilft ...

Verwandte Themen