2009-08-07 9 views
4

Ich bin neu in NHibernate, die Konfiguration Aspekt von ihm schien mir immer zu beschwerlich. Gestern bin ich auf die Auto Mapping-Funktionen von Fluent NHibernate gestoßen und war entsprechend beeindruckt.Fluent NHibernate. Auto Mapping und Konventionen

Um mich selbst zu erziehen, habe ich mich selbst die Herausforderung gestellt, das "Erste Schritte Erste Projekt" (http://wiki.fluentnhibernate.org/show/GettingStartedFirstProject) mit AutoMappings und Konventionen zu versuchen. Ich muss zugeben, dass ich nicht viel Glück habe.

meine Schritte summise:

ich das Datenbankschema in dem Beispiel einige kleineren Änderungen vorgenommen, vor allem die Unterstreichungen von dem Fremdschlüssel zu entfernen (dh Product_id zu ProductId), da dies wäre es inline bringen mit unserem Datenbankbenennungsstandards.

Q1) Ich habe versucht, eine IHasManyConvention Implementierung mit der ForeignKeyConvention als Beispiel aber die WithKeyColumn Methode leider nicht zu existieren scheinen zu schreiben (ich nehme an, dies liegt daran, dass ich yesterdays bauen so anschließend das Design geändert hat heruntergeladen, da der Artikel geschrieben wurde). Wie behebe ich das?

Ich habe im Beispiel auch einige kleinere Änderungen an der Ebene Entities vorgenommen, da ich dachte, dies würde es einfacher machen, sie sollten StoresStockedIn in Stores (Product.cs) und Staff to Employees (Store.cs) umbenennen.

Mein Code sieht wie folgt aus:

var cfg = Fluently.Configure() 
.Database(MsSqlConfiguration.MsSql2005 
    .ConnectionString(c => c 
     .Is(connectionString))) 
.Mappings(m => m.AutoMappings.Add(
       AutoPersistenceModel.MapEntitiesFromAssemblyOf<Store>() 
        .Where(t => t 
         .Namespace == "FluentNHibernateTesting.Entities") 
         .ConventionDiscovery.Setup(c => c.Add<ForeignKeyConvention>()) 
       )) 
.BuildSessionFactory(); 

ich dann versuchen, die Geschäfte, Produkte und Mitarbeiter nach der Begleit-Beispiel zur Datenbank hinzufügen. Die Ausnahme, die ich erhalte passiert am Commit und ist:

Objekt verweist auf eine nicht gespeicherte transiente Instanz - speichern Sie die vorübergehende Instanz vor dem Löschen. Typ: FluentNHibernateTesting.Entities.Employee, Entität: FluentNHibernateTesting.Entities.Employee

Q2) Wie behebe ich dieses Problem? Ich verstehe (aufgrund meiner begrenzten Lektüre), dass es etwas damit zu tun hat, die Kaskadenelemente von Objektbeziehungen korrekt einzurichten, aber ich bin ein wenig darüber im Unklaren, wie man das effektiv mit Auto Mapping umgehen kann.

Q3) Gibt es ein Soll-Release-Datum für das Fluent-Projekt? Ich (so wie ich viele andere vermute) finde, dass dies eine hervorragende Initiative ist, aber ich denke daran, sie zu benutzen, wenn sie nicht in einem stabilen Zustand ist.

Q4) Es ist in vielen der Blogs erwähnt, dass sie stetig in Richtung Parität der Funktionen in Fluent mit hbn.xml arbeiten. Gibt es irgendwo eine Liste dieser fehlenden Features, um die Auswertung und Verwendung dieses Tools zu erleichtern?

Schätzen Sie die Hilfe im Voraus.

Antwort

1

Ich fragte James Gregory die gleichen Fragen in einer E-Mail an ihn direkt. Er lieferte diese ausgezeichnete Antwort.

‚Hey Paul,

1) KeyColumnNames ist das, was Sie nach.

2) Sie können dies auf eine von drei Arten tun. Richten Sie IHasManyConvention ein, um global alle Beziehungen zu kaskadieren, einen ForTypesThatDeriveFrom-Aufruf oder eine automatische Überschreibung zu verwenden.

3) Wir testen jetzt unsere Version 1.0. Ich bin mir nicht sicher, ob wir eine öffentliche Betaversion haben oder direkt veröffentlichen, aber das sollte in den nächsten Wochen passieren.

4) Es ist sehr unwahrscheinlich, dass wir jemals vollständig mit NHibernate ausgestattet werden, wir haben keine Lust zu sein. Viele der NH-Funktionen sind extrem esoterisch, und es ist wenig sinnvoll, sie zu implementieren. Ab 1.0 wird es nur wenige Features geben, die wir nicht regelmäßig nutzen. Ich kann zuversichtlich sagen, dass alle gängigen Mapping-Szenarien berücksichtigt werden, und wenn es etwas gibt, was nicht möglich ist, kann man für diesen Fall immer wieder auf hbm zurückgreifen.

vorgreifen keine Kommentare, die unsere docs veraltet sind, die Dokumentation für 1.0 werden überarbeitet wird;)

James'

Dank James.

0

Gibt es ein Sollfreigabedatum für das fließende Projekt ? Ich (ich nehme an, viele andere) fühlen, dass dies eine ausgezeichnete Initiative ist, aber ich denke daran, es verwenden, es sei denn, es ist in einem stabilen Zustand.

Sie sollten jetzt eine funktionierende Version von Fluent nHibernate aus ihrem SVN-Repository erhalten können. Sie haben auch Binärdateien kompiliert.

Zur Zeit sind keine offiziellen Versionen von Fluent NHibernate verfügbar. Dies ist keine Reflexion der Qualität, sondern unserer schnellen Veränderungsrate.Unsere Code-Basis wird täglich aktualisiert, was die Veröffentlichung offizieller Veröffentlichungen zu einem sinnlosen Unterfangen macht, bis wir die Feature-Parität mit NHibernate Core erreichen. Die meisten regulären Funktionen, die Sie täglich verwenden, sind bereit.

http://fluentnhibernate.org/downloads

Die aktuellen Themen sind hier:

http://code.google.com/p/fluent-nhibernate/issues/list

Keiner von ihnen erscheinen Deal-Killer zu sein. Ich schätze, es hängt davon ab, wie viel Zeit du zum Experimentieren hast.

0

Objekt verweist auf eine nicht gespeicherte transiente Instanz - vor dem Spülen der transienten Instanz speichern. Typ: FluentNHibernateTesting.Entities.Employee, Entity: FluentNHibernateTesting.Entities.Employee

Wenn Sie Google Objekt eine nicht gespeicherte transiente Instanz verweist, werden Sie mehrere Spiele für diese finden. Ihre beste Wette ist es, diese und die Fehlersuche zu durchlaufen. Anekdotisch, von dem, was ich gelesen habe, klingt es wie die Fehlermeldung bedeutet genau das, was es sagt, oder es gibt eine viele-viele oder kaskadierende Beziehung, die nicht aktualisiert wird.

Verwandte Themen