Uncategorized

Singleton Litedb

Litedb bir db dosyasında bson değeri olarak verilerinizi saklayabilen açık kaynaklı bir kütüphanedir. Nuget ile projeye dahil edilebiliyor. Fakat özellikle Xamarin ile kullanıldığında dosyaya aynı anda fazla erişim esnasında sıkıntı yaşanıyor. Bunu db isteklerini standartlaştıracağımız class’ımızda singleton pattern yöntemini kullanıyoruz.

public class DB
{
    public static LiteDatabase Connection;
    static object locker = new object();
    static DB dbclass;
    static string personalPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
    public static DB Create(string dbname)
    {
        if (dbclass == null)
        {
            lock (locker)
            {
                dbclass = new DB();
                Connection = new LiteDatabase(personalPath + "/" +  dbname + ".db");
            }
        }
        return dbclass;
    }

    public List<T> Find<T>(BsonExpression filter)
    {
        var collection = Connection.GetCollection<T>(typeof(T).Name);
        List<T> result = collection.Find(filter).ToList<T>();
        //Connection.Dispose();
        return result;
    }

    public List<T> FindAll<T>()
    {
        var collection = Connection.GetCollection<T>(typeof(T).Name);
        List<T> result = collection.FindAll().ToList<T>();
        //Connection.Dispose();
        return result;
    }

    public dynamic Insert<T>(T newDocument)
    {
        var collection = Connection.GetCollection<T>(typeof(T).Name);
        dynamic result= collection.Insert(newDocument);
        //Connection.Dispose();
        return result;
    }

    public dynamic BulkInsert<T>(IEnumerable<T> newDocuments)
    {
        var collection = Connection.GetCollection<T>(typeof(T).Name);
        dynamic result = collection.InsertBulk(newDocuments);
        //Connection.Dispose();
        return result;
    }

    public bool Update<T>(T newDocument)
    {
        var collection = Connection.GetCollection<T>(typeof(T).Name);
        bool result = collection.Update(newDocument);
        //Connection.Dispose();
        return result;
    }

    public uint BulkUpdate<T>(IEnumerable<T> newDocuments)
    {
        uint errors = 0;
        var collection = Connection.GetCollection<T>(typeof(T).Name);
        foreach (var item in newDocuments)
        {
            try
            {
                collection.Update(item);
            }
            catch {
                errors++;
            }
        }
        //Connection.Dispose();
        return errors;
    }

    public bool Delete<T>(Guid documentId)
    {
        var collection = Connection.GetCollection<T>(typeof(T).Name);
        bool result = collection.Delete(documentId);
        //Connection.Dispose();
        return result;
    }

    public int ClearCollection<T>()
    {
        var collection = Connection.GetCollection<T>(typeof(T).Name);
        int result = collection.DeleteAll();
        //Connection.Dispose();
        return result;
    }

    public void Close()
    {
        Connection.Dispose();
    }
}

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir