views:

56

answers:

1

Okay, here is my problem...

I created a Data Layer using the RTM Fluent Nhibernate. My create session code looks like this:

_session = Fluently.Configure().
Database(SQLiteConfiguration.Standard.UsingFile("Data.s3db"))                   
                        .Mappings( m =>
                        {
                         m.FluentMappings.AddFromAssemblyOf<ProductMap>();
                         m.FluentMappings.AddFromAssemblyOf<ProductLogMap>();
                        })
                        .ExposeConfiguration(BuildSchema)
                        .BuildSessionFactory();

When I reference the module in a test project, then create a test fixture that looks something like this:

    [Test]
    public void CanAddProduct()
    {
        var product = new Product {Code = "9", Name = "Test 9"};
        IProductRepository repository = new ProductRepository();

        repository.AddProduct(product);

        using (ISession session = OrmHelper.OpenSession())
        {
            var fromDb = session.Get<Product>(product.Id);

            Assert.IsNotNull(fromDb);
            Assert.AreNotSame(fromDb, product);
            Assert.AreEqual(fromDb.Id, product.Id);
        }

My tests pass. When I open up the created SQLite DB, the new Product with Code 9 is in it. the tables for Product and ProductLog are there.

Now, when I create a new console application, and reference the same library, do something like this:

        Product product = new Product() {Code = "10", Name = "Hello"};
        IProductRepository repository = new ProductRepository();
        repository.AddProduct(product);

        Console.WriteLine(product.Id);

        Console.ReadLine();

It doesn't work. I actually get pretty nasty exception chain. To save you lots of head aches, here is the summary:

Top Level exception:

An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.\r\n\r\n

The PotentialReasons collection is empty

The Inner exception:

The IDbCommand and IDbConnection implementation in the assembly System.Data.SQLite could not be found. Ensure that the assembly System.Data.SQLite is located in the application directory or in the Global Assembly Cache. If the assembly is in the GAC, use element in the application configuration file to specify the full name of the assembly.

Both the unit test library and the console application reference the exact same version of System.Data.SQLite. Both projects have the exact same DLLs in the debug folder. I even tried copying SQLite DB the unit test library created into the debug directory of the console app, and removed the build schema lines and it still fails

If anyone can help me figure out why this won't work outside of my unit tests it would be greatly appreciated. This crazy bug has me at a stand still.

+2  A: 

hi thorkia

if you are on a 64x o/s try setting the compiler build option to x86

HTH, Berryl

Berryl
My God Berryl, your a genius... Any idea where in documentation I could have found this?
thorkia
no. i figured it out almost as painfully as you have done. what a drag, eh?
Berryl
Yup, a total drag... I spent a couple of hours trying before I thought somebody has to know what the problem is
thorkia