So arbeiten Sie mit Fluent NHibernate in C #

ORMs (objektrelationale Mapper) vereinfachen den Datenzugriff in Ihrer Anwendung, indem Sie Code schreiben können, um CRUD-Vorgänge (Erstellen, Lesen, Aktualisieren und Löschen) auszuführen. ORM-Frameworks werden seit langem verwendet, um die Impedanzfehlanpassung zu beseitigen, die zwischen dem Objekt und den Datenmodellen in einer Anwendung besteht. Mit ORMs können Sie im Wesentlichen Code schreiben, um CRUD-Operationen auszuführen, ohne direkt mit dem zugrunde liegenden Datenbankanbieter interagieren zu müssen. Die Verwendung von ORMs hilft Ihnen daher, das Objektmodell Ihrer Anwendung vom Datenmodell zu isolieren.

Warum fließend NHibernate?

NHibernate speichert die Zuordnungsinformationen im XML-Format in .hbm-Dateien. Für jede Entitätsklasse sollte eine .hbm-Datei vorhanden sein. Diese .hbm-Datei wird verwendet, um die Entitäten den entsprechenden Datenbanktabellen zuzuordnen. Bei der Verwendung von Fluent NHibernate müssen Sie nicht mehr die umständlichen .hbm.xml-Dateien verwenden, die Sie bei der Arbeit mit NHibernate verwenden mussten.

Fluent NHibernate ist das statisch kompilierte, kompilierungssichere Gegenstück zum beliebten ORM-Tool NHibernate, mit dem eine Zuordnung zwischen den POCO-Klassen und der NHibernate-Engine erstellt werden kann, ohne dass umständliche XML-Dateien erforderlich sind. Es bietet eine Fluent-API, mit der Sie auch LINQ verwenden können, um Daten über der NHibernate-Engine abzufragen. In den folgenden Abschnitten werden wir diskutieren, wie wir Fluent NHibernate installieren, Modelle erstellen, diese Modelle oder Entitätsklassen zuordnen und Fluent NHibernate verwenden können, um CRUD-Operationen auszuführen.

Anfangen

Führen Sie die folgenden Schritte aus, um mit der Verwendung von Fluent NHibernate zu beginnen:

  1. Öffnen Sie die Visual Studio 2015-IDE
  2. Klicken Sie auf Datei -> Neu -> Projekt
  3. Erstellen Sie ein neues Projekt. Erstellen Sie der Einfachheit halber eine Windows-Anwendung
  4. Geben Sie einen Namen für das Projekt an
  5. Klicken Sie auf OK, um das Projekt zu speichern

Nachdem ein Projekt in Visual Studio erstellt wurde, möchten Sie möglicherweise Fluent NHibernate installieren, um es in Ihrer Anwendung zu verwenden. Wenn Sie NuGet installiert haben, ist es am einfachsten, Fluent NHibernate über den NuGet Package Manager zu installieren. Wählen Sie dazu das Projekt im Projektmappen-Explorer aus, klicken Sie mit der rechten Maustaste und wählen Sie die Option "NuGet-Pakete verwalten ...", um das Fluent NHibernate-Framework von NuGet zu installieren.

Arbeiten mit fließendem NHibernate

Um mit Fluent NHibernate arbeiten zu können, müssen Sie zunächst eine Modellklasse erstellen. Betrachten Sie die folgende Datenbanktabelle.

CREATE TABLE [dbo].[Product]

(

   [Id] INT NOT NULL PRIMARY KEY,

   [Name] VARCHAR(50) NULL,

   [Description] VARCHAR(50) NULL

)

Hier ist die entsprechende Modellklasse.

public class Product

   {

       public virtual int Id { get; set; }

       public virtual string Name { get; set; }

       public virtual string Description { get; set; }

   }

Nachdem die Datenbanktabelle und die entsprechende Modellklasse fertig sind, müssen Sie im nächsten Schritt die erforderliche Zuordnung erstellen. Um eine Entität in Fluent NHibernate zuzuordnen, sollten Sie über eine entsprechende Zuordnungsklasse verfügen. Solche Zuordnungsklassen sollten von ClassMap abgeleitet sein, wobei T die von Ihnen verwendete Entität darstellt. Fluent NHibernate verwendet stark typisierte C # -Klassen, um die Eigenschaften der Modellklassen den entsprechenden Feldern der Datenbanktabellen zuzuordnen.

Hier ist die Zuordnungsklasse mit dem Namen ProductMap.

public class ProductMap : ClassMap

   {

       public ProductMap()

       {

           Id(x => x.Id);

           Map(x => x.Name);

           Map(x => x.Description);

           Table("Product");

       }

   }

Der nächste Schritt besteht darin, eine Hilfsklasse zu erstellen, um eine Verbindung zu unserer Datenbank herzustellen. So würde diese Klasse aussehen:

public static class FluentNHibernateHelper

   {

       public static ISession OpenSession()

       {

string connectionString = "Write your database connection string here";

           ISessionFactory sessionFactory = Fluently.Configure()

               .Database(MsSqlConfiguration.MsSql2012

                 .ConnectionString(connectionString).ShowSql()

               )

               .Mappings(m =>

                         m.FluentMappings

                             .AddFromAssemblyOf())

               .ExposeConfiguration(cfg => new SchemaExport(cfg)

                .Create(false, false))

               .BuildSessionFactory();

           return sessionFactory.OpenSession();

       }

   }

Beachten Sie den Aufruf der sessionFactory.OpenSession () in der letzten Anweisung. Dieser Aufruf erstellt tatsächlich eine Kommunikationssitzung mit der zugrunde liegenden Datenbank, dh, er stellt eine Verbindung zur verwendeten Datenbank her. Sie können jetzt die statische Methode FluentNHibernateHelper.OpenSession () aufrufen, um eine Verbindung zur Datenbank herzustellen. Das folgende Codeausschnitt zeigt, wie Sie die zuvor erstellte Hilfsklasse nutzen können, um der Produktdatenbanktabelle einen Produktdatensatz hinzuzufügen.

static void Main(string[] args)

       {

           using (var session = FluentNHibernateHelper.OpenSession())

           {

               var product = new Product { Name = "Lenovo Laptop", Description = "Sample product" };

               session.SaveOrUpdate(product);

           }

       }

Das folgende Codefragment zeigt, wie Sie Daten aus der Datenbank mithilfe unserer Fluent NHibernate-Hilfsklasse abfragen können.

using (ISession session = FluentNHibernateHelper.OpenSession())

           {

               var products = session.Query().ToList();

               //Usual code

           }

Um mit den in diesem Artikel angegebenen Codebeispielen zu arbeiten, sollten Sie sicherstellen, dass Ihrer Klasse die folgenden Namespaces hinzugefügt wurden.

  • using FluentNHibernate.Cfg;
  • using FluentNHibernate.Cfg.Db;
  • unter Verwendung von NHibernate;
  • unter Verwendung von NHibernate.Linq;
  • using NHibernate.Tool.hbm2ddl;
  • using System.Linq;

Weitere Informationen zur Arbeit mit Fluent NHibernate erhalten Sie von GitHub.