Stimmt nicht. Ganz im Gegenteil. Die meisten Vorbehalte kommen bezüglich der Mapping Datei die man in XML ausdrückt. Doch seit es das Projekt FluentNHibernate gibt, lässt sich das Argument eines fehlenden Designers entkräften. Ich persönlich finde es praktisch die Mappings im Code zu definieren.

Hier ein zwei Beispiele um die Northwind Tabellen Customers und Orders auf eigene Objekte zu mappen.

   1: public class Customer 
   2: {
   3:     public virtual string Id { get; set; }
   4:     public virtual string CompanyName { get; set; }
   5:     public virtual IList<Order> Orders { get; set; }
   6: }
   1: public class CustomerMap : ClassMap<Customer>
   2: {
   3:     public CustomerMap()
   4:     {
   5:         WithTable("Customers");
   6:         Id(e => e.Id, "CustomerID");
   7:         Map(e => e.CompanyName, "CompanyName");
   8:         HasMany(e => e.Orders).WithKeyColumn("CustomerID");
   9:     }
  10: }

Customer und das entsprechende Mapping in CustomerMap. In Zeile 8 von CustomerMap sieht man die Relation auf Bestellungen.

   1: public class Order 
   2: {
   3:     public virtual int Id { get; set; }
   4:     public virtual DateTime Date { get; set; }
   5:     public virtual IList<Position> Positions { get; set; }
   6: }

Die Klasse Order und das dazu passende Mapping OrderMap.

   1: public class OrderMap : ClassMap<Order>
   2: {
   3:     public OrderMap()
   4:     {
   5:         WithTable("Orders");
   6:         Id(e => e.Id, "OrderID");
   7:         Map(e => e.Date, "OrderDate");
   8:         HasMany(e => e.Positions).WithKeyColumn("OrderID");
   9:     }
  10: }

Um das Mapping zu aktivieren definiert man die entsprechenden Provider, das Mapping Assembly zusammen und erzeugt die SessionFactory.

   1: ISessionFactory sessionFactory =
   2:     Fluently
   3:     .Configure()
   4:         .Database(MsSqlConfiguration.MsSql2005.ConnectionString(
   5:             c => c.Server(@"(local)\sqlexpress")
   6:                   .Database("Northwind")
   7:                   .TrustedConnection()))
   8:         .Mappings(
   9:             m => m.FluentMappings
  10:                     .AddFromAssemblyOf<NHibernateRepositoryImplementation>())
  11:     .BuildSessionFactory();

Ist doch wirklich nicht kompliziert, oder?