Browse Source

fixed Dapper Mysql,changed interface IEGSaveData and all tools

master
jkpete 4 months ago
parent
commit
82c7425044
  1. 4
      addons/EGFramework/Module/EGSave.cs
  2. 2
      addons/EGFramework/Module/SaveTools/EGByteSave.cs
  3. 98
      addons/EGFramework/Module/SaveTools/EGCsvSave.cs
  4. 39
      addons/EGFramework/Module/SaveTools/EGDapper.cs
  5. 4
      addons/EGFramework/Module/SaveTools/EGJsonSave.cs
  6. 35
      addons/EGFramework/Module/SaveTools/EGLiteDBSave.cs
  7. 128
      addons/EGFramework/Module/SaveTools/EGMysqlSave.cs
  8. 7
      addons/EGFramework/Module/SaveTools/SaveToolsInterface.cs

4
addons/EGFramework/Module/EGSave.cs

@ -37,7 +37,7 @@ namespace EGFramework @@ -37,7 +37,7 @@ namespace EGFramework
#region Load Data or Object and Unload
public void LoadDataFile<TSaveData>(string path) where TSaveData:IEGSaveData,IEGSave,new(){
TSaveData saveData = new TSaveData();
saveData.InitSaveFile(path);
saveData.InitSave(path);
if(!DataBaseFiles.ContainsKey(path)){
DataBaseFiles.Add(path,saveData);
}else{
@ -67,7 +67,7 @@ namespace EGFramework @@ -67,7 +67,7 @@ namespace EGFramework
public void LoadObjectFile<TSaveObject>(string path) where TSaveObject:IEGSaveObject,IEGSave,new(){
TSaveObject saveObject = new TSaveObject();
saveObject.InitSaveFile(path);
saveObject.InitSave(path);
if(!ObjectFiles.ContainsKey(path)){
ObjectFiles.Add(path, saveObject);
}else{

2
addons/EGFramework/Module/SaveTools/EGByteSave.cs

@ -58,7 +58,7 @@ namespace EGFramework @@ -58,7 +58,7 @@ namespace EGFramework
}
}
public void InitSaveFile(string path)
public void InitSave(string path)
{
ReadDataBlock(path);
}

98
addons/EGFramework/Module/SaveTools/EGCsvSave.cs

@ -9,6 +9,9 @@ using System.Reflection; @@ -9,6 +9,9 @@ using System.Reflection;
namespace EGFramework
{
/// <summary>
/// CSV Save tools, support read and write CSV file.The dataKey param is not use.please use "" or any string.
/// </summary>
public class EGCsvSave : IEGSaveData, IEGSave, IEGSaveReadOnly
{
public bool IsReadOnly { get; set; }
@ -20,7 +23,7 @@ namespace EGFramework @@ -20,7 +23,7 @@ namespace EGFramework
private string ReadText { set; get; }
public void InitSaveFile(string path)
public void InitSave(string path)
{
ReadDataBlock(path);
}
@ -214,6 +217,99 @@ namespace EGFramework @@ -214,6 +217,99 @@ namespace EGFramework
}
return sourceList.Where(expression.Compile());
}
public void AddData<TData>(string dataKey, TData data)
{
if(IsReadOnly){
throw new Exception("This file is readonly! can't set any data to file.");
}
string[] csvSet = new string[CsvDataHeader.Keys.Count()];
foreach(PropertyInfo property in data.GetType().GetProperties()){
CsvParamAttribute csvParam = property.GetCustomAttribute<CsvParamAttribute>();
if(csvParam != null && CsvDataHeader.ContainsKey(csvParam._name)){
csvSet[CsvDataHeader[csvParam._name]] = property.GetValue(data).ToString();
}
}
CsvDataBlock.Add(csvSet);
this.WriteDataBlock(DefaultPath);
}
public void AddData<TData>(string dataKey, IEnumerable<TData> dataSet)
{
if(IsReadOnly){
throw new Exception("This file is readonly! can't set any data to file.");
}
foreach(TData data in dataSet){
string[] csvSet = new string[CsvDataHeader.Keys.Count()];
foreach(PropertyInfo property in data.GetType().GetProperties()){
CsvParamAttribute csvParam = property.GetCustomAttribute<CsvParamAttribute>();
if(csvParam != null && CsvDataHeader.ContainsKey(csvParam._name)){
csvSet[CsvDataHeader[csvParam._name]] = property.GetValue(data).ToString();
}
}
CsvDataBlock.Add(csvSet);
}
this.WriteDataBlock(DefaultPath);
}
public void RemoveData<TData>(string dataKey, object id)
{
if(IsReadOnly){
throw new Exception("This file is readonly! can't set any data to file.");
}
bool IsAdd = false;
int dataID = 0;
if(id.GetType()==typeof(int)){
dataID = (int)id;
}else if(int.TryParse(id.ToString() ,out dataID)){
throw new Exception("Id cannot be convert to int!");
}
if(dataID>=CsvDataBlock.Count() || dataID < 0){
IsAdd = true;
}
if(IsAdd){
return;
}else{
CsvDataBlock.RemoveAt(dataID);
}
this.WriteDataBlock(DefaultPath);
}
public void UpdateData<TData>(string dataKey, TData data, object id)
{
if(IsReadOnly){
throw new Exception("This file is readonly! can't set any data to file.");
}
bool IsAdd = false;
int dataID = 0;
if(id.GetType()==typeof(int)){
dataID = (int)id;
}else if(int.TryParse(id.ToString() ,out dataID)){
throw new Exception("Id cannot be convert to int!");
}
if(dataID>=CsvDataBlock.Count() || dataID < 0){
IsAdd = true;
}
string[] csvSet = new string[CsvDataHeader.Keys.Count()];
foreach(PropertyInfo property in data.GetType().GetProperties()){
CsvParamAttribute csvParam = property.GetCustomAttribute<CsvParamAttribute>();
if(csvParam != null && CsvDataHeader.ContainsKey(csvParam._name)){
csvSet[CsvDataHeader[csvParam._name]] = property.GetValue(data).ToString();
}
}
if(!IsAdd){
CsvDataBlock[dataID] = csvSet;
}else{
throw new Exception("Data not found!");
}
this.WriteDataBlock(DefaultPath);
}
public IEnumerable<string> GetKeys()
{
return CsvDataHeader.Keys;
}
}
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]

39
addons/EGFramework/Module/SaveTools/EGDapper.cs

@ -1,39 +0,0 @@ @@ -1,39 +0,0 @@
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq.Expressions;
//ORM Save tools. First support SQLite and MySQL,In future we will support other Database who implement DBConnection.
namespace EGFramework{
public class EGDapper : IEGSave, IEGSaveData
{
/// <summary>
///
/// </summary>
/// <param name="conn">files conn Str or address ip port,username and passwd</param>
public void InitSaveFile(string conn)
{
throw new System.NotImplementedException();
}
public IEnumerable<TData> FindData<TData>(string dataKey, Expression<Func<TData, bool>> expression) where TData : new()
{
throw new NotImplementedException();
}
public IEnumerable<TData> GetAll<TData>(string dataKey) where TData : new()
{
throw new NotImplementedException();
}
public TData GetData<TData>(string dataKey, object id) where TData : new()
{
throw new NotImplementedException();
}
public void SetData<TData>(string dataKey, TData data, object id)
{
throw new NotImplementedException();
}
}
}

4
addons/EGFramework/Module/SaveTools/EGJsonSave.cs

@ -16,7 +16,7 @@ namespace EGFramework @@ -16,7 +16,7 @@ namespace EGFramework
private JObject SaveObject{
get {
if(_SaveObject == null){
InitSaveFile(DefaultPath);
InitSave(DefaultPath);
}
return _SaveObject;
}
@ -25,7 +25,7 @@ namespace EGFramework @@ -25,7 +25,7 @@ namespace EGFramework
/// <summary>
/// Init a new save data file or load an other file with json suffix, if you want to load other save data, please use this function to reload;
/// </summary>
public void InitSaveFile(string path)
public void InitSave(string path)
{
DefaultPath = path;
if(!File.Exists(path)){

35
addons/EGFramework/Module/SaveTools/EGLiteDBSave.cs

@ -15,13 +15,13 @@ namespace EGFramework @@ -15,13 +15,13 @@ namespace EGFramework
private LiteDatabase Database{
get {
if(_Database == null){
InitSaveFile(DefaultPath);
InitSave(DefaultPath);
}
return _Database;
}
}
public void InitSaveFile(string path)
public void InitSave(string path)
{
DefaultPath = path;
if (!Directory.Exists(Path.GetDirectoryName(DefaultPath)))
@ -60,6 +60,35 @@ namespace EGFramework @@ -60,6 +60,35 @@ namespace EGFramework
return collection.Find(expression);
}
public void AddData<TData>(string dataKey, TData data)
{
LiteCollection<TData> collection = (LiteCollection<TData>)Database.GetCollection<TData>(dataKey);
collection.Insert(data);
}
public void AddData<TData>(string dataKey, IEnumerable<TData> data)
{
LiteCollection<TData> collection = (LiteCollection<TData>)Database.GetCollection<TData>(dataKey);
collection.Insert(data);
}
public void RemoveData<TData>(string dataKey,object id)
{
LiteCollection<TData> collection = (LiteCollection<TData>)Database.GetCollection<TData>(dataKey);
if(collection.FindById((BsonValue)id)==null){
collection.Delete((BsonValue)id);
}
}
public void UpdateData<TData>(string dataKey, TData data, object id)
{
LiteCollection<TData> collection = (LiteCollection<TData>)Database.GetCollection<TData>(dataKey);
collection.Update((BsonValue)id,data);
}
public IEnumerable<string> GetKeys()
{
return Database.GetCollectionNames();
}
}
}

128
addons/EGFramework/Module/SaveTools/EGMysqlSave.cs

@ -0,0 +1,128 @@ @@ -0,0 +1,128 @@
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq.Expressions;
using MySql.Data.MySqlClient;
using Dapper;
using System.Reflection;
using System.Linq;
//ORM Save tools. First support SQLite and MySQL,In future we will support other Database who implement DBConnection.
namespace EGFramework{
/// <summary>
/// This Class used Dapper for operate MySQL database.
/// </summary>
public class EGMysqlSave : IEGSave, IEGSaveData
{
private string Conn { set; get; }
public MySqlConnection Connection { set; get; }
public bool IsInit { set; get; }
/// <summary>
/// "server="+Address+";port="+Port+";uid="+UserName+";pwd="+Password+";database="+DataBase+";"
/// </summary>
/// <param name="conn">files conn Str or address ip port,username and passwd</param>
public void InitSave(string conn)
{
try
{
Connection = new MySqlConnection(conn);
IsInit = true;
}
catch (System.Exception e)
{
EG.Print("e:" + e);
}
}
public IEnumerable<TData> GetAll<TData>(string dataKey) where TData : new()
{
IEnumerable<TData> result = Connection.Query<TData>("select * from "+dataKey);
return result;
}
public TData GetData<TData>(string dataKey, object id) where TData : new()
{
TData result = Connection.QuerySingle<TData>("select * from "+dataKey+" where ID = @ID",new {ID = id});
return result;
}
public IEnumerable<TData> FindData<TData>(string dataKey, Expression<Func<TData, bool>> expression) where TData : new()
{
IEnumerable<TData> sourceList = Connection.Query<TData>("select * from "+dataKey);
return sourceList.Where(expression.Compile());
}
public void SetData<TData>(string dataKey, TData data, object id)
{
throw new NotImplementedException();
}
public void AddData<TData>(string dataKey, TData data)
{
// throw new System.NotImplementedException();
Type DataType = typeof(TData);
var properties = DataType.GetProperties();
string keySet = "";
string keySetParam = "";
foreach(PropertyInfo key in properties){
keySet += key.Name + ",";
keySetParam += "@" + key.Name + ",";
}
keySet = keySet.TrimEnd(',');
keySetParam = keySetParam.TrimEnd(',');
int count = Connection.Execute(@"insert "+dataKey+"("+keySet+") values("+keySetParam+")",data);
//EG.Print("count:" + count);
}
public void AddData<TData>(string dataKey, IEnumerable<TData> data)
{
Type DataType = typeof(TData);
var properties = DataType.GetProperties();
string keySet = "";
string keySetParam = "";
foreach(PropertyInfo key in properties){
keySet += key.Name + ",";
keySetParam += "@" + key.Name + ",";
}
keySet = keySet.TrimEnd(',');
keySetParam = keySetParam.TrimEnd(',');
string sql = @"insert "+dataKey+"("+keySet+") values("+keySetParam+")";
int count = Connection.Execute(sql,data);
//EG.Print("count:" + count);
}
public void RemoveData<TData>(string dataKey, object id)
{
Type DataType = typeof(TData);
int count = Connection.Execute(@"delete from "+dataKey+" where ID = @ID",new {ID = id});
//EG.Print("count:" + count);
}
public void UpdateData<TData>(string dataKey, TData data, object id)
{
Type DataType = typeof(TData);
EG.Print("----"+DataType.Name);
var properties = DataType.GetProperties();
string keyMap = "";
foreach(PropertyInfo key in properties){
if(key.Name=="ID"){
continue;
}
keyMap += key.Name + " = @"+key.Name +",";
}
keyMap = keyMap.TrimEnd(',');
string sql = @"update "+DataType.Name+" set "+ keyMap +" where ID = " + id;
EG.Print(sql);
int count = Connection.Execute(sql,data);
//EG.Print("count:" + count);
}
public IEnumerable<string> GetKeys()
{
throw new NotImplementedException();
}
}
}

7
addons/EGFramework/Module/SaveTools/SaveToolsInterface.cs

@ -8,7 +8,7 @@ namespace EGFramework @@ -8,7 +8,7 @@ namespace EGFramework
{
#region Sync_Interface
public interface IEGSave{
void InitSaveFile(string path);
void InitSave(string path);
}
public interface IEGSaveReadOnly{
@ -24,6 +24,7 @@ namespace EGFramework @@ -24,6 +24,7 @@ namespace EGFramework
TData GetData<TData>(string dataKey,object id) where TData : new();
IEnumerable<TData> GetAll<TData>(string dataKey) where TData : new();
IEnumerable<TData> FindData<TData>(string dataKey,Expression<Func<TData, bool>> expression) where TData : new();
IEnumerable<string> GetKeys();
}
public interface IEGSaveObject : IEGSaveObjectReadOnly{
@ -41,6 +42,10 @@ namespace EGFramework @@ -41,6 +42,10 @@ namespace EGFramework
public interface IEGSaveData : IEGSaveDataReadOnly{
void SetData<TData>(string dataKey,TData data,object id);
void AddData<TData>(string dataKey,TData data);
void AddData<TData>(string dataKey,IEnumerable<TData> data);
void RemoveData<TData>(string dataKey,object id);
void UpdateData<TData>(string dataKey,TData data,object id);
}
#endregion

Loading…
Cancel
Save