NHibernate چیست و آموزش استفاده از NHibernate

یک پروژه اوپن سورس ORM دات نت معروف می باشد. این بر پایه فریم ورک ORM جاوا که خود بسیار معروف است بوده و با ADO.NET ساخته شده است. نسخه فعلی آن 4.0.3 است و در ویژوال استادیو توسط Nuget manager نصب می شود.

NHibernate چیست و آموزش استفاده از NHibernate

NHibernate چیست ؟
یک ORM است که تحت پلت فرم دات نت مایکروسافت کار می‌کند ، و یک FrameWork را برای کار راحت‌تر و با پیچیدگی کمتر با database پیشنهاد می‌کند. در این مدل فیلدهای Database به آبجکت‌های معادلی، برای استفاده در محیط دات نت تبدیل (map) می‌شوند . و با این کار برنامه‌نویسان از پیچیدگی‌های ارتباطی DataBase ای خلاص می‌شوند. NHibernate با بانک های اطلاعاتی زیادی مانند SQL Server, Oracle, DB2, Firebird, Informix, Ingres, MySQL, PostgreSQL, SQLite, SQL Server CE و غیره کار می کند.

خلاصه ای از کار هایی که باید انجام دهیم :

ساخت یک پروژه WebAPI

نصب کردن NHibernate توسط Package Manager console یا Nuget

تعریف یک شیء Bussiness ساده

ساخت یک کلاس NHibernate Mapper برای بارگذاری و ذخیره شیء Bussiness

تنظیم NHibernate برای وصل شدن یه بانک اطلاعاتی

نوشتن عملیات CRUD (چهار عمل اصلی) ساده

 

ساختن پروژه WebAPI

یک پروژه WebAPI ساده با نام NHibernateExample می سازیم.

ساخت بانک اطلاعاتی

یک بانک اطلاعاتی با نام NHibernateExample ساخته و در آن یک جدول با نام User مانند شکل زیر ایجاد می نماییم :

 

ساخت شیء Bussiness

یک کلاس User مانند زیر می سازیم :

public class User  
{  
   public virtual int Id { get; set; }  
   public virtual String FirstName { get; set; }  
   public virtual String LastName { get; set; }  
  
} 

یک کلاس NHibernate Mapper برای بارگذاری و ذخیره سازی شیء Bussiness مانند زیر می سازیم :
 


    public class UserMap: ClassMapping < User > {  
      
        public UserMap() {  
            Schema("[dbo]");  
            Table("[User]");  
            Id(i = > i.Id, map = > map.Generator(Generators.GuidComb));  
            Property(x = > x.FirstName, m = > {  
                m.NotNullable(true);  
            });  
            Property(x = > x.LastName, m = > {  
                m.NotNullable(true);  
            });  
      
        }  
      
    }  

تنظیم NHibernate برای وصل شدن یه بانک اطلاعاتی

یک کلاس با نام ConfigurationManager می سازیم.

public static class ConfigurationManager {  
  
    public static Configuration SetConfiguration() {  
        var mapper = new ModelMapper();  
        var config = new Configuration();  
        mapper.AddMappings(Assembly.GetExecutingAssembly().GetExportedTypes());  
        config.DataBaseIntegration(x = > {  
            x.ConnectionString = "Data Source=U6031005-TPL-A;Initial Catalog=NHibernateExample;Integrated Security=True";  
            x.Driver < SqlClientDriver > ();  
            x.Dialect < MsSql2008Dialect > ();  
        });  
        config.AddAssembly(Assembly.GetExecutingAssembly());  
        config.AddMapping(mapper.CompileMappingForAllExplicitlyAddedEntities());  
        return config;  
    }  
} 

نوشتن عملیات CRUD (چهار عمل اصلی) ساده

یک کلاس DataAccess با نام DALUser ایجاد می کنیم.

public class DalUser: IDALUser {  
    private ISessionFactory sessionFactory;  
  
    public DalUser() {  
        var config = ConfigurationManager.SetConfiguration();  
        sessionFactory = config.BuildSessionFactory();  
    }  
  
    public List < User > UserList() {  
        var userList = new List < User > ();  
        using(var session = sessionFactory.OpenSession()) {  
            using(var tx = session.BeginTransaction()) {  
                userList = session.Query < User > ().ToList();  
                tx.Commit();  
            }  
        }  
  
        return userList;  
    }  
  
} 

ساخت کلاس Bussiness

public class BLUser: IBLUser {  
    public List < User > UserList() {  
        IDALUser dalUser = new DalUser();  
        return dalUser.UserList();  
    }  
}

ساخت کلاس Controller

[RoutePrefix("User")]  
public class UserController: ApiController {  
    [Route("UserList")]  
    public IHttpActionResult getUserList() {  
        IBLUser blUser = new BLUser();  
        var userlist = blUser.UserList();  
        return Ok(userlist);  
    }  
}