Last year, I used SubSonic 3 and SQLite in a VS2008 project very successfully and was quite pleased with the results. Just recently, I tried to setup SubSonic 3 and SQLite in a VS2010 project and have been met with the inner exception when trying to instantiate a new SimpleRepository:
The type initializer for
‘System.Data.SQLite.SQLiteFactory’
threw an exception
Just to make sure I wasn’t going crazy, I tried the exact same code and app.config file in VS2008 and no problem. Weird!
Currently, I’m using SubSonic 3.0.0.4 and the x64 version of System.Data.SQLite 1.0.73.0 (3.7.6.3) (though I tried the 32 bit version as well.) I added both DLLs as a Reference and set “Copy Local” to TRUE.
My App.Config looks like:
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite"
type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="myDatabase" connectionString="Data Source=C:\DB\mydatabase.db3" providerName="System.Data.SQLite"/>
</connectionStrings>
And my code looks like:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SubSonic.Repository;
namespace SubSonicSqliteTestConsole
{
class Program
{
static void Main(string[] args)
{
var repo = new SimpleRepository("myDatabase", SimpleRepositoryOptions.RunMigrations);
}
}
}
Any ideas?
I am using SubSonic 3 with Visual Studio 2010 and SQLite 1.0.66 and it works.
However there are a few things you have to do:
You have to add (or modify) this to your app.config file. SQLite won’t work without the useLegacyV2RuntimeActivationPolicy flag set to true
My Factory initialisation code looks like this (it includes the Version and the PublicKeyToken). I got this settings from the machine.config file on my dev machine where I ran the setup and have choosen to integrate SQLite to Visual Studio 2010 (from the All Programs\SQLite folder). The file is located @
%WinDir%\Microsoft.NET\Framework\<FrameworkVersion>\CONFIGMy connection strings contains slashes instead of backslashes in the path and contains a version
Hope that helps.
Update:
I see you use a x64 version of SQLite, so forget about the first hint. But I leave it, maybe it is helpful for others.