views:

366

answers:

1

Hello

I want a simple unit test configuration. My understanding is that the sqlite fluent config defaults to Castle, and I have a reference set to NHibernate.ByteCode.Castle.dll, yet I am getting an error saying there is no ProxyFactory setting set.

What am I missing?

Cheers,
Berryl

=== the CODE ===

public abstract class InMemoryDatabase : IDisposable
{
    private static Configuration _cfg;
    private static ISessionFactory _sessionFactory;

    protected InMemoryDatabase()
    {
        _sessionFactory = _createSessionFactory();
        Session = _sessionFactory.OpenSession();
        _buildSchema(Session);
    }

    protected ISession Session { get; set; }

    #region IDisposable Members

    public void Dispose() { Session.Dispose(); }

    #endregion

    private static ISessionFactory _createSessionFactory()
    {
        return Fluently.Configure()
            .Database(SQLiteConfiguration.Standard.InMemory().ShowSql())
            .Mappings(M =>
                M.FluentMappings.AddFromAssemblyOf<User>())
            .ExposeConfiguration(Cfg => _cfg = Cfg)
            .BuildSessionFactory();
    }

    private static void _buildSchema(ISession Session)
    {
        var export = new SchemaExport(_cfg);
        export.Execute(true, true, false, Session.Connection, null);
    }
}

==== the exception ====

TestCase 'SmackNhibTestLab.FluentMapping.Tests.UserClassMapTests.PersistenceSpec_ok'
failed: TestFixtureSetUp failed in UserClassMapTests
TestFixture failed: FluentNHibernate.Cfg.FluentConfigurationException : 
An invalid or  incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.


----> NHibernate.Bytecode.ProxyFactoryFactoryNotConfiguredException : The ProxyFactoryFactory was not configured. 
Initialize 'proxyfactory.factory_class' property of the session-factory configuration section with one of the available NHibernate.ByteCode providers.
Example:
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
Example:
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory()

0 passed, 1 failed, 0 skipped, took 2.55 seconds (NUnit 2.5.2).
+2  A: 

You can set the property yourself easily enough - see below code to see a good way to see a good way do it. I still would have expected this line of code to have been baked into the SQLite default config?

private static ISessionFactory _createSessionFactory() {
    var sqLiteConfiguration = Standard.InMemory().ShowSql();
    sqLiteConfiguration.ProxyFactoryFactory(typeof(ProxyFactoryFactory).AssemblyQualifiedName); <== ** OK now

    return Fluently.Configure()
            .Database(sqLiteConfiguration)
            .Mappings(M =>
                M.FluentMappings.AddFromAssemblyOf<User>())
            .ExposeConfiguration(Cfg => _cfg = Cfg)
            .BuildSessionFactory();
    }

Cheers, Berryl

Berryl