Sunday, July 3, 2011

my news

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using FluentNHibernate;
using FluentNHibernate.Automapping;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Context;
using NHibernate.Tool.hbm2ddl;

namespace ShareFiles.WebUI
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode,
    // visit http://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication
    {

        public static ISessionFactory SessionFactory = CreateSessionFactory();

        /// <summary>
        /// Builds SessionFactory
        /// Sets the class stub for CreateMappings
        /// Creates the class stub for BuidSchema
        /// </summary>
        /// <returns></returns>
        private static ISessionFactory CreateSessionFactory()
        {
            const string boxConnString = "ShareFilesConnectionString";
            PersistenceModel model = CreateMappings();
            return Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2005
                              .ConnectionString(c => c.FromConnectionStringWithKey(boxConnString)))
                .ExposeConfiguration(BuildSchema)
                .BuildSessionFactory();
        }

        /// <summary>
        /// Creates Mappings class
        /// </summary>
        /// <returns></returns>
        private static PersistenceModel CreateMappings()
        {
            return AutoMap
                .Assembly(System.Reflection.Assembly.GetCallingAssembly())
                .Where(t => t.Namespace == "ShareFiles.Data");
        }


        /// <summary>
        /// Builds Schema  
        /// </summary>
        /// <param name="config"></param>
        private static void BuildSchema(Configuration config)
        {
            new SchemaExport(config).Create(false, true);

        }

        /// <summary>
        /// Initializes Session
        /// </summary>
        /// <returns></returns>
        public static ISession GetCurrentSession()
        {
            return SessionFactory.GetCurrentSession();
        }


        /// <summary>
        /// Begins Session Factory
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static void ContextBeginRequest(object sender, EventArgs e)
        {
            ISession session = SessionFactory.OpenSession();
            session.BeginTransaction();
            CurrentSessionContext.Bind(session);
        }

        private static ISession BeginSession(ISessionFactory sessionFactory)
        {
            var session = SessionFactory.OpenSession();
            session.BeginTransaction();
            return session;
        }
        /// <summary>
        /// Ends Session Factory
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>


        private static void EndSession(ISession session)
        {
            if (session.Transaction != null && session.Transaction.IsActive)
            {
                session.Transaction.Commit();
            }
            session.Dispose();
        }


        /// <summary>
        /// begins the Global Assembly
        /// </summary>
        /// <param name="filters"></param>
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

        }

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
        }
    }
}