This post is a continuation of previous post. This post gives a startup using NHibernate framework. In this post we are discussing the Data access components.
In Data Access project, I have created a class CustomerDA for specifying Data Access methods. This class has the following method.
- GetConfigFilePath – This method is a Private method, used for getting the physical path of nhibernate.config file located in UI Project.
/// <summary> /// Geting the nhibernate.config file path /// </summary> private string GetConfigFilePath { get { string path = HttpContext.Current.Request.PhysicalApplicationPath; if (!path.EndsWith("\\")) path = path + "\\"; path = path + "nhibernate.config"; return path; } }
- Get – Method for getting Customer details for a particular Customer.
/// <summary> /// Get the customer details with Customer Id /// </summary> /// <param name="customerID"></param> /// <returns></returns> public Customer Get(string customerID) { try { // Create the configuration object Configuration cfg = new Configuration(); cfg.Configure(GetConfigFilePath); // Create the session ISessionFactory sessionFactory = cfg.BuildSessionFactory(); // Open the session using (ISession session = sessionFactory.OpenSession()) { // Get Cusomers IList<Customer> customers = session.CreateCriteria(typeof(Customer)) .Add(Expression.Eq("CustomerID", customerID)) .List<Customer>(); // Get the first customer (as CustomerID is unique, it will be always one) Customer customer = null; if ((customers != null) && (customers.Count > 0)) customer = customers[0]; return customer; } } catch (Exception ex) { throw ex; } }
- GetAll – Method for getting all the Customer in a list from the database.
/// <summary> /// Get all the customer from the database. /// </summary> /// <param name="sortBy"></param> /// <param name="sortType"></param> /// <returns></returns> public IList<Customer> GetAll(string sortBy, SortType sortType) { try { // Create the configuration object Configuration cfg = new Configuration(); cfg.Configure(GetConfigFilePath); // Create the session ISessionFactory sessionFactory = cfg.BuildSessionFactory(); // Open the session using (ISession session = sessionFactory.OpenSession()) { // Create Criteria ICriteria criteria = session.CreateCriteria(typeof(Customer)); if (sortBy != null) //If sortBy values pass (Pass null if not required) criteria.AddOrder(sortType == SortType.Ascending ? Order.Asc(sortBy) : Order.Desc(sortBy)); // Get Cusomers IList<Customer> customers = criteria.List<Customer>(); return customers; } } catch (Exception ex) { throw ex; } }
- Create – Method for creating a Customer
/// <summary> /// Create the Customer details /// </summary> /// <param name="customer"></param> public void Create(Customer customer) { ITransaction transaction = null; try { // Create the configuration object Configuration cfg = new Configuration(); cfg.Configure(GetConfigFilePath); // Create the session ISessionFactory sessionFactory = cfg.BuildSessionFactory(); // Open the session ISession session = sessionFactory.OpenSession(); // Begin a new ITransaction transaction = session.BeginTransaction(); // Save the given entity. session.Save(customer); session.Flush(); transaction.Commit(); } catch (Exception ex) { // Rollback the transaction. if (transaction != null) { transaction.Rollback(); } throw ex; } }
- Update – Method for Update an existing Customer.
/// <summary> /// Update the Customer details /// </summary> /// <param name="customer"></param> public void Update(Customer customer) { ITransaction transaction = null; try { // Create the configuration object Configuration cfg = new Configuration(); cfg.Configure(GetConfigFilePath); // Create the session ISessionFactory sessionFactory = cfg.BuildSessionFactory(); // Open the session ISession session = sessionFactory.OpenSession(); // Begin a new ITransaction transaction = session.BeginTransaction(); // Get existing Cusomer Customer existingCustomer = session.Get<Customer>(customer.CustomerID); if (existingCustomer == null) throw new Exception(string.Format("Can not find the Customer with id: {0}.", customer.CustomerID)); session.Clear(); // Save the given entity. session.Update(customer); session.Flush(); transaction.Commit(); } catch (Exception ex) { // Rollback the transaction. if (transaction != null) { transaction.Rollback(); } throw ex; } }
- Delete – Method for Deleting an Existing Customer. Here I can call this method using Customer Id or Customer object from UI layer.
/// <summary> /// Delete the Customer details /// </summary> /// <param name="customer"></param> public void Delete(Customer customer) { ITransaction transaction = null; try { // Create the configuration object Configuration cfg = new Configuration(); cfg.Configure(GetConfigFilePath); // Create the session ISessionFactory sessionFactory = cfg.BuildSessionFactory(); // Open the session ISession session = sessionFactory.OpenSession(); // Begin a new ITransaction transaction = session.BeginTransaction(); // Get existing Cusomer Customer existingCustomer = session.Get<Customer>(customer.CustomerID); if (existingCustomer == null) throw new Exception(string.Format("Can not find the Customer with id: {0}.", customer.CustomerID)); // To clean the session, because we just use the 'session.Get' method. session.Clear(); // Delete the given entity. session.Delete(customer); session.Flush(); transaction.Commit(); } catch (Exception ex) { // Rollback the transaction. if (transaction != null) { transaction.Rollback(); } throw ex; } }
/// <summary> /// Delete the Custoer Details /// </summary> /// <param name="customerID"></param> public void Delete(string customerID) { Customer customer = Get(customerID); Delete(customer); }
I also have an enum which is used in GetAll method for specifying the sorting type.
public enum SortType { Ascending, Descending }
The output of the running sample looks below:
Entry Screen for Customer (using NHibernate framework) |
download the working example of the source code in C# here
HI thanks for this nice post...but can you post some with parent and child relationship table ...CRUD....
Hi deepzb84, Thanks for your comments. Could you please send me some more information about your requirement to understand better. So I can provide a sample implementation for the same.