Configuration of NHibernate through app.config file


Ahamed Fazil Buhari
SharePoint Developer
Published On :   15 Sep 2017
Visit Count
Today :  5    Total :   230
Plan, Migrate, Secure, Report
SharePoint & Office 365 Tool. Simple & Easy to Use. 15-Day Trial!

SharePoint Office 365 Tool
Simple & Powerful Tool for Migration, Security & Reporting. Free Trial


Hello everyone, in this article we will see how to use Nhiberate in you C# code. Before going deep into NHibernate I would like to give some basic information about this magical DB connector. NHibernate is an object-relational mapping (ORM) solution for the Microsoft .NET platform. It provides a framework for mapping an object-oriented domain model to a traditional relational database (from Wikipedia).

Before we start, add NHibernate reference to your solution from NuGet Package. Here Iā€™m using the version 4.1.1.4

 

image

 

You can refer the nhibernate config in the app.config file or you can have separate config file. It is good practice to have that in separate config file and refer that file in app.config file.

Also here I have used log4net for logging. And this will be used along with Nhibernate while configuration.

 

image

 <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
   <session-factory>
     <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
     <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
     <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
     <property name="connection.connection_string">Data Source=*****;database=****;Integrated Security=True;</property>
     <property name="show_sql">true</property>
     <property name="adonet.batch_size">100</property>
   </session-factory>
 </hibernate-configuration>
 

In app.config, refer your hibernated configured .config file by using the below tag,

image

 

image

 

 

Use the below code to create Database, here it first checks whether the Database with that name already exists or not, if not exists then it will create new Database.

 using NHibernate;
 using NHibernate.Mapping.ByCode;
 using NHibernate.Mapping.ByCode.Conformist;
 using NHibernate.Tool.hbm2ddl;
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using Ncfg = NHibernate.Cfg;
 namespace MySolution
 {
 public class DataBaseOperations
     {
         private Ncfg.Configuration _configuration;
         private ISessionFactory _sessionFactory;
         private ISession _session;
 
         public DataBaseOperations()
         {
       //Configuration values are taken from .config file
             _configuration = new Ncfg.Configuration();
             _configuration.Configure();
             var mapper = new ModelMapper();
             mapper.AddMapping(typeof(HibDataBaseMapping));
             _configuration.AddMapping(mapper.CompileMappingForAllExplicitlyAddedEntities());
         }
 
         public void CreateDatabaseSchema()
         {
             ValidateSchema(_configuration);
         }
         public void ValidateSchema(Ncfg.Configuration config)
         {
             try
             {
                 new SchemaValidator(config).Validate();
             }
             catch
             {
                 new SchemaExport(_configuration).Create(false, true);
             }
         }
 
 	//Mapping using Nhibernate class mapping
 	public class HibDataBaseMapping : ClassMapping<HibDataBase>
     	{
         public HibDataBaseMapping()
         {
     //Each table should have unique ID
             Id<int>(x => x.ID);
             Property<string>(x => x.FirstName);
             Property<string>(x => x.LastName);          
             Property<DateTime?>(x => x.UpdatedOn);          
         }
     	}
 	//This will be the Table name and Properties will become colummns
 public class HibDataBase
     	{        
         public virtual int ID { get; set; }
         public virtual string FirstName { get; set; }
         public virtual string LastName { get; set; }       
         public virtual DateTime? UpdatedOn { get; set; }    
 }
     }
 
     class Program
     {
         static void Main(string[] args)
         {
             //Constructor will be called and all config values are set
             DataBaseOperations dbOperation = new DataBaseOperations();
             //Validate Table and create
             dbOperation.CreateDatabaseSchema();
         }
     }
 }
 

Happy Coding

Ahamed

SharePoint Usage Reports
Usage reports, collaboration and audit for SharePoint.
Categories

KWizCom Forms App