2010-12-13 3 views
1

Hat Fluent NHibernate eine einfache Methode zum Automatisieren von Entitäten?C# fließend nhibernate

Sagen wir, ich habe einige Klassen wie die folgende und entsprechenden classmaps:

public sealed class Hello 
{ 
    public String Name { get; set; } 
    public DateTime Timestamp { get; set; } 
} 

public class HelloMapping : ClassMap<Hello> 
{ 
    public HelloMapping() 
    { 
     Not.LazyLoad(); 
     // Some Id here 
     Map(x => x.Name).Not.Nullable().Length(64); 
     Map(x => x.Timestamp).Not.Nullable(); 
    } 
} 

So hat Fluent NHibernate hat so etwas wie „fügen Sie alle abgebildeten Einheit wie Hello?

Wenn nicht, was ist der einfachste Weg, den NHibernate meine bereitgestellten Mappings verwenden zu lassen?

Antwort

3

Es hängt davon ab, was Sie mit "wie" meinen?

Meinst du alle Entitäten im selben Namespace? Dann können Sie tun

public class MyConfiguration : DefaultAutomappingConfiguration { 
    public override bool ShouldMap(Type type) { 
     return type.Namespace == typeof(Hello).Namespace; 
    } 
} 

Was auch immer Sie meinen, können Sie wahrscheinlich eine Konvention zu tun, was Sie versuchen zu erreichen. Siehe auto mapping in Fluent NHibernate.

+0

Ist es wahr, dass, wenn ich das Lazy Loading deaktiviere, die Eigenschaften nicht virtuell sein müssen? Weil ich denke, in diesem Fall werden keine Lazy-Loading-Proxies generiert und auf die Eigenschaften wird einfach zugegriffen. Oder irre ich mich? (nur um zu wissen :) –

+0

@ Yippie-Kai-Yay: Ich habe nicht festgestellt, dass Sie Lazy Loading deaktiviert; Du bist zu 100% korrekt. – jason

0

Kurze Antwort: http://wiki.fluentnhibernate.org/Auto_mapping. Sie können Objekte und grundlegende Konventionen verwenden, die in FluentNH integriert sind, um Objekte abzubilden, die nicht viel benutzerdefiniertes Verhalten erfordern.

Sie können Vererbung auch verwenden, um Zuordnungen zu definieren, die über die meisten oder alle Klassen hinweg gemeinsame Elemente haben. Say Hello ist eine Basisklasse, die ID, Name und Timestamp definiert. Sie können das Mapping für diese Basisklasse definieren und dann direkt davon ableiten, um Zuordnungen für andere Objekte zu erzeugen, oder Sie können JoinedSubclass-Zuordnungen für Objekte definieren, die in einer gemeinsamen Tabellenstruktur gespeichert werden sollen (normalerweise weil sie verschiedene Varianten einer Basis sind) Klasse, wie CheckingAccount, SavingsAccount und MoneyMarketAccount sind alle Arten von BankAccounts mit im Wesentlichen ähnlichen Datenstrukturen.