Skip to content

Instantly share code, notes, and snippets.

@paulodiogo
Last active November 1, 2020 14:41
Show Gist options
  • Save paulodiogo/ffee093cc7c0605558eaaf6fe59618a2 to your computer and use it in GitHub Desktop.
Save paulodiogo/ffee093cc7c0605558eaaf6fe59618a2 to your computer and use it in GitHub Desktop.
Xamarin + HNibernate + Mono.Data.Sqlite.Portable

Packages:

FluentNHibernate

Mono.Data.Sqlite.Portable

NHibernate

Fluently.Configure()
    .Database(MonoSQLiteConfiguration.Standard                
    .ConnectionString(c => c.Is($"Data Source={path_to_database_file};Version=3;UseUTF16Encoding=True;")))
    .Mappings(m => m.FluentMappings.AddFromAssemblyOf<X>())
    .BuildSessionFactory();
using FluentNHibernate.Cfg.Db;
public class MonoSQLiteConfiguration : PersistenceConfiguration<MonoSQLiteConfiguration>
{
public static MonoSQLiteConfiguration Standard
{
get { return new MonoSQLiteConfiguration(); }
}
public MonoSQLiteConfiguration()
{
Driver<MonoSQLiteDriver>();
Dialect<NHibernate.Dialect.SQLiteDialect>();
Raw("query.substitutions", "true=1;false=0");
}
public MonoSQLiteConfiguration InMemory()
{
Raw("connection.release_mode", "on_close");
return ConnectionString(c => c
.Is("Data Source=:memory:;Version=3;New=True;"));
}
public MonoSQLiteConfiguration UsingFile(string fileName)
{
return ConnectionString(c => c
.Is(string.Format("Data Source={0};Version=3;New=True;", fileName)));
}
public MonoSQLiteConfiguration UsingFileWithPassword(string fileName, string password)
{
return ConnectionString(c => c
.Is(string.Format("Data Source={0};Version=3;New=True;Password={1};", fileName, password)));
}
}
public class MonoSQLiteDriver : NHibernate.Driver.ReflectionBasedDriver
{
public MonoSQLiteDriver()
: base(
"Mono.Data.Sqlite",
"Mono.Data.Sqlite",
"Mono.Data.Sqlite.SqliteConnection",
"Mono.Data.Sqlite.SqliteCommand")
{
}
public override bool UseNamedPrefixInParameter
{
get
{
return true;
}
}
public override bool UseNamedPrefixInSql
{
get
{
return true;
}
}
public override string NamedPrefix
{
get
{
return "@";
}
}
public override bool SupportsMultipleOpenReaders
{
get
{
return false;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment