using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using LiteDB; namespace EGFramework { public class EGLiteDBSave : IEGSave,IEGSaveData { private string DefaultPath { set; get; } private LiteDatabase _Database { set; get; } private LiteDatabase Database{ get { if(_Database == null){ InitSave(DefaultPath); } return _Database; } } public void InitSave(string path) { DefaultPath = path; if (!Directory.Exists(Path.GetDirectoryName(DefaultPath))) { Directory.CreateDirectory(Path.GetDirectoryName(DefaultPath)); } // Default is "SaveData/DefaultLiteDBData.db" _Database = new LiteDatabase(path); } public TData GetData(string dataKey, object id) where TData : new() { LiteCollection collection = (LiteCollection)Database.GetCollection(dataKey); TData result = collection.FindById((BsonValue)id); return result; } public void SetData(string dataKey, TData data, object id) { LiteCollection collection = (LiteCollection)Database.GetCollection(dataKey); if(collection.FindById((BsonValue)id)==null){ collection.Insert((BsonValue)id, data); } collection.Update(data); } public IEnumerable GetAll(string dataKey) where TData : new() { LiteCollection collection = (LiteCollection)Database.GetCollection(dataKey); return collection.FindAll(); } public IEnumerable GetPage(string dataKey, int pageIndex, int pageSize) where TData : new() { if(pageIndex <= 0){ pageIndex = 1; } int startPointer = (pageIndex - 1) * pageSize; LiteCollection collection = (LiteCollection)Database.GetCollection(dataKey); IEnumerable result = collection.FindAll().Skip(startPointer).Take(pageSize); return result; } public IEnumerable FindData(string dataKey, Expression> expression) where TData : new() { LiteCollection collection = (LiteCollection)Database.GetCollection(dataKey); return collection.Find(expression); } public IEnumerable FindData(string dataKey, string columnName, string keyWords) where TData : new() { LiteCollection collection = (LiteCollection)Database.GetCollection(dataKey); return collection.Find(Query.EQ(columnName,new BsonValue(keyWords))); } public void AddData(string dataKey, TData data) { LiteCollection collection = (LiteCollection)Database.GetCollection(dataKey); collection.Insert(data); } public void AddData(string dataKey, IEnumerable data) { LiteCollection collection = (LiteCollection)Database.GetCollection(dataKey); collection.Insert(data); } public void AddData(string dataKey, Dictionary data) { ILiteCollection collection = Database.GetCollection(dataKey); BsonDocument keyValuePairs = new BsonDocument(); foreach (var param in data) { keyValuePairs.Add(param.Key, new BsonValue(param.Value)); } collection.Insert(keyValuePairs); } public void AddGroup(string datakey, List> dataGroup) { foreach (Dictionary data in dataGroup) { this.AddData(datakey, data); } } public int RemoveData(string dataKey, object id) { ILiteCollection collection = Database.GetCollection(dataKey); if (collection.FindById((BsonValue)id) != null) { collection.Delete((BsonValue)id); return 1; } else { return 0; } } public void UpdateData(string dataKey, TData data, object id) { LiteCollection collection = (LiteCollection)Database.GetCollection(dataKey); collection.Update((BsonValue)id,data); } public void UpdateData(string dataKey, Dictionary data, object id) { ILiteCollection collection = Database.GetCollection(dataKey); BsonDocument keyValuePairs = new BsonDocument(); foreach (var param in data) { keyValuePairs.Add(param.Key, new BsonValue(param.Value)); } collection.Update((BsonValue)id,keyValuePairs); } public IEnumerable GetKeys() { return Database.GetCollectionNames(); } public bool ContainsKey(string dataKey) { return GetKeys().Contains(dataKey); } public bool ContainsData(string dataKey, object id) { return Database.GetCollection(dataKey).Exists((BsonValue)id); } public int GetDataCount(string dataKey) { return Database.GetCollection(dataKey).Count(); } } }