Ich denke, es braucht mehr Zeit, um NHibernate zu lernen.
EF bietet grafischen Designer, leider hat NHibernate keinen generischen Designer. Übrigens ist es kein Problem. Wenn Sie domänengesteuert (DDD) entwerfen, werden Sie zuerst Ihre Entitäten entwerfen und Sie kümmern sich nicht um die Datenbankstruktur (wie Sie es gewohnt sind), NHibernate wird das für Sie übernehmen.
EF 4 näher an NHibernate. Ich würde nicht mit EF 3.5 arbeiten, es fehlen viele Features.
Wenn Sie denken, NHibernate ist auf den ersten Blick zu kompliziert, können Sie beginnen mit Frameworks auf NHibernate gebaut. ActiveRecords und Sharp Architect sind gute Beispiele.
AFAIR EF 3.5 unterstützt nur SQL Server 2000. Es konnte die neuen Datentypen von SQL Server 2005 nicht verarbeiten. Ich habe keine Informationen zu EF 4, aber ich nehme an, dass es diese Verbesserungen unterstützt.
Wenn Sie NHibernate in echten Wort-Anwendungen verwenden, müssen Sie eine Infrastruktur erstellen. Z.B. Ich implementierte die Unit of Work- und Repository-Muster, um Tests schreiben und Ebenen in meiner Anwendung erstellen zu können. Sie müssen dasselbe mit EF erwarten. Entfernen und Anhängen von Entitäten in EF 3.5 war keine leichte Sache, ich musste komplizierte Erweiterungsmethoden schreiben, um Felder schmutzig zu markieren und so weiter. Ich hoffe, dass sie es in EF 4 gelöst haben. Es gibt kein solches Problem mit NHibernate.
Sie müssen keine HQL-Abfragen in NHibernate schreiben, Sie können den LINQ-Provider verwenden. Ich denke, es ist sehr wichtig. :)
Alles in allem NHibernate ist ein ausgereiftes Produkt mit guter Community und kommerzieller Unterstützung. EF ist jung, wird aber von Microsoft stark unterstützt. Oh, und EF ist nur eine Microsoft-Sache, während Sie Ihr NHibernate-Wissen auch nach Java portieren können. Das zählt für dich.
.NET 3.5 oder .NET 4.0? Ich würde Ihnen empfehlen, sich von EF 1.0/3.5 fernzuhalten. –