Updating Database Version - negue/LiteDB GitHub Wiki
LiteDB is has a scheme less data structure. But what happens if you need initialize your database with some data in first time use? And if your database must be update (after deploy your app) and you don't know which version user datafile is?
LiteDB implements a user version database. User version is an integer that starts with 1 and can be updated in string connection when you need update your database. User version do not allow double value or letters, so use only positive integers. LiteDB doesn't use this number in any other place.
This resource exists in many embedded databases, like SQLLite and web IndexedDb or Entity Framework (Migrations).
To use the user version you must create a class that implements LiteDatabase
and override OnVersionUpdate
virtual method.
public class AppDB : LiteDatabase
{
public AppDB(string connectionString) : base(connectionString) { }
protected override void OnVersionUpdate(int newVersion)
{
if (newVersion == 1)
{
// Do init stuff
}
else if (newVersion == 2)
{
// Do update version 1 -> 2 stuff
}
else if (newVersion == 3)
{
// Do update version 2 -> 3 stuff
}
}
}
When you need to open your database, just add a version
command in the connection string.
using(var db = new AppDB("filename=user.db;version=1"))
{
// database are initialized if file not exists
}
And, when you need to update your database structure, just change increase the version number:
using(var db = new AppDB("filename=user.db;version=2"))
{
// database are updated to version 2
}
Your database can be updated many versions:
// If database user version is 1
using(var db = new AppDB("filename=user.db;version=4"))
{
// LiteDB run:
// OnVersionUpdate(2);
// OnVersionUpdate(3);
// OnVersionUpdate(4);
}