private void EnsureDatabaseIsCreatedAndAttachToDatabase()
{
using (var session = new Session(instance))
{
try
{
Api.JetAttachDatabase(session, database, AttachDatabaseGrbit.None);
return;
}
catch (EsentErrorException e)
{
if (e.Error == JET_err.DatabaseDirtyShutdown)
{
try
{
using (var recoverInstance = new Instance("Recovery instance for: " + database))
{
recoverInstance.Init();
using (var recoverSession = new Session(recoverInstance))
{
ConfigureInstance(recoverInstance.JetInstance);
Api.JetAttachDatabase(recoverSession, database,
AttachDatabaseGrbit.DeleteCorruptIndexes);
Api.JetDetachDatabase(recoverSession, database);
}
}
}
catch (Exception)
{
}
Api.JetAttachDatabase(session, database, AttachDatabaseGrbit.None);
return;
}
if (e.Error != JET_err.FileNotFound)
throw;
}
new SchemaCreator(session).Create(database);
Api.JetAttachDatabase(session, database, AttachDatabaseGrbit.None);
}
}