NHibernate - Fließender Winterschlaf

In diesem Kapitel werden wir uns mit fließendem NHibernate befassen. Fließendes NHibernate ist eine andere Art der Zuordnung, oder Sie können sagen, es ist eine Alternative zu den Standard-XML-Zuordnungsdateien von NHibernate. Anstatt XML zu schreiben(.hbm.xml files)Unterlagen. Mit Hilfe von Fluent NHibernate können Sie Zuordnungen in stark typisiertem C # -Code schreiben.

  • In Fluent NHibernate werden Zuordnungen zusammen mit dem Rest Ihrer Anwendung erstellt.

  • Sie können Ihre Zuordnungen genauso wie Ihren Anwendungscode leicht ändern, und der Compiler schlägt bei Tippfehlern fehl.

  • Es verfügt über ein herkömmliches Konfigurationssystem, in dem Sie Muster zum Überschreiben von Namenskonventionen und vielen anderen Dingen angeben können.

  • Sie können auch festlegen, wie die Dinge einmal benannt werden sollen, dann erledigt Fluent NHibernate den Rest.

Schauen wir uns ein einfaches Beispiel an, indem wir ein neues Konsolenprojekt erstellen. In diesem Kapitel verwenden wir eine einfache Datenbank, in der wir eine einfache Kundentabelle haben, wie in der folgenden Abbildung gezeigt.

Installieren Sie Fluent NHibernate

Der erste Schritt zum Starten von Fluent NHibernate ist die Installation des Fluent NHibernate-Pakets. Also öffne dasNuGet Package Manager Console und geben Sie den folgenden Befehl ein.

PM> install-package FluentNHibernate

Nach erfolgreicher Installation wird die folgende Meldung angezeigt.

Fügen wir eine einfache Modellklasse des Kunden hinzu, und das folgende Programm zeigt die Implementierung der Kundenklasse.

using System; 
using System.Collections.Generic; 
using System.Linq;
using System.Text; 
using System.Threading.Tasks;

namespace FluentNHibernateDemo { 
   class Customer { 
      public virtual int Id { get; set; } 
      public virtual string FirstName { get; set; } 
      public virtual string LastName { get; set; } 
   } 
}

Jetzt müssen wir Mappings mit fließendem NHibernate erstellen, also fügen Sie eine weitere Klasse hinzu CustomerMapin Ihrem Projekt. Hier ist die Implementierung der CustomerMap-Klasse.

using FluentNHibernate.Mapping; 
using System; 
using System.Collections.Generic; 
using System.Linq; using System.Text; 
using System.Threading.Tasks;

namespace FluentNHibernateDemo { 
   class CustomerMap : ClassMap<Customer> { 
      public CustomerMap() { 
         Id(x => x.Id); 
         Map(x => x.FirstName); 
         Map(x => x.LastName); 
         Table("Customer"); 
      } 
   }
}

Fügen wir eine weitere Klasse hinzu NHibernateHelper in dem wir verschiedene Konfigurationseinstellungen vornehmen.

using FluentNHibernate.Cfg; 
using FluentNHibernate.Cfg.Db; 
using NHibernate; 
using NHibernate.Tool.hbm2ddl;

namespace FluentNHibernateDemo { 

   public class NHibernateHelper { 
	
      private static ISessionFactory _sessionFactory;
		
      private static ISessionFactory SessionFactory { 
         get { 
            if (_sessionFactory == null)
            InitializeSessionFactory(); return _sessionFactory; 
         } 
      }
   
      private static void InitializeSessionFactory() { 
         _sessionFactory = Fluently.Configure() 
			
         String Data Source = asia13797\\sqlexpress;
         String Initial Catalog = NHibernateDemoDB;
         String Integrated Security = True;
         String Connect Timeout = 15;
         String Encrypt = False;
         String TrustServerCertificate = False;
         String ApplicationIntent = ReadWrite;
         String MultiSubnetFailover = False;
			
         .Database(MsSqlConfiguration.MsSql2008 .ConnectionString( 
            @"Data Source + Initial Catalog + Integrated Security + Connect Timeout
            + Encrypt + TrustServerCertificate + ApplicationIntent + 
            MultiSubnetFailover") .ShowSql() ) 
				
         .Mappings(m => m.FluentMappings
         .AddFromAssemblyOf<Program>()) 
         .ExposeConfiguration(cfg => new SchemaExport(cfg) 
         .Create(true, true)) 
         .BuildSessionFactory(); 
      }
		
      public static ISession OpenSession() { 
         return SessionFactory.OpenSession(); 
      } 
   }
}

Gehen wir jetzt zum Program.cs Datei, in der wir eine Sitzung starten und dann einen neuen Kunden erstellen und diesen Kunden wie unten gezeigt in der Datenbank speichern.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks;

namespace FluentNHibernateDemo { 
   class Program { 
	
      static void Main(string[] args) { 
		
         using (var session = NHibernateHelper.OpenSession()) { 
			
            using (var transaction = session.BeginTransaction()) { 
               var customer = new Customer { 
                  FirstName = "Allan", 
                  LastName = "Bomer" 
               }; 
					
               session.Save(customer); 
               transaction.Commit();
               Console.WriteLine("Customer Created: " + customer.FirstName + "\t" +
                  customer.LastName); 
            } 
				
            Console.ReadKey(); 
         } 
      } 
   } 
}

Lassen Sie uns Ihre Anwendung ausführen und Sie werden die folgende Ausgabe sehen.

if exists (select * from dbo.sysobjects where id = object_id(N'Customer') and
   OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table Customer

create table Customer (
   Id INT IDENTITY NOT NULL,
   FirstName NVARCHAR(255) null,
   LastName NVARCHAR(255) null,
   primary key (Id)
)

NHibernate: INSERT INTO Customer (FirstName, LastName) VALUES (@p0, @p1); 
   select SCOPE_IDENTITY();@p0 = 'Allan' [Type: String (4000)], 
   @p1 = 'Bomer' [Type: String (4000)]
   Customer Created: Allan Bomer

Wie Sie sehen, wird der neue Kunde erstellt. Um den Kundendatensatz anzuzeigen, gehen wir zur Datenbank und sehen die Daten anzeigen. Sie werden sehen, dass 1 Kunde hinzugefügt wurde.