views:

117

answers:

1

Hi, I'm trying to convert my data layer from Linq2Sql to nHibernate. I think Xml the configuration in nHibernate is pretty backwards so I'm using Fluent.

I've managed to get fluent, add in a repository pattern and unit of work pattern, and my unit tests are looking good.

However now as I'm plugging it into my services layer I'm noticing that each time I run my app the database gets recreated.

I am guessing this is down to my SessionProvider code, I'm not sure of all the extensions I'm using. Can someone shed some light on how to stop this from happening?

public sealed class SessionProvider
{
    private static ISessionFactory _sessionFactory;

    private static ISessionFactory CreateSessionFactory()
    {
        try
        {
            return Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2005
                              .ConnectionString(Properties.Settings.Default.DBConnection)
                              .Cache(c => c
                                              .UseQueryCache()
                                              .ProviderClass<HashtableCacheProvider>())
                              //.ProxyFactoryFactory("NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHiber nate.ByteCode.Castle")
                              .ShowSql())
                              .Mappings(m=>m.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly()))
                .ExposeConfiguration(BuildSchema)
                .BuildSessionFactory();
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine(ex.Message);
            return null;
        }


    }

    public static ISessionFactory SessionFactory
    {
        get
        {
            if (_sessionFactory == null)
            {
                _sessionFactory = CreateSessionFactory();
            }
            return _sessionFactory;
        }
    }

    public static ISession GetSession()
    {
        return SessionFactory.OpenSession();
    }

    private static void BuildSchema(Configuration config)
    {
        // this NHibernate tool takes a configuration (with mapping info in)
        // and exports a database schema from it
        new SchemaExport(config).Create(false, true);
    }
}
+2  A: 

Remove this line

.ExposeConfiguration(BuildSchema)

Read more about new SchemaExport(config).Create(false, true); here

Actually last argument is all about to create database.

Mike Chaliy
Thanks Mike. And thanks for the link also.
Jordan