コード例 #1
0
 public List<Entity> allEntities(Type typeEntity)
 {
     Entity entity = (Entity)Activator.CreateInstance(typeEntity);
     Query query = new Query(entity.NameTable);
     query.addTypeQuery(TypeQuery.select);
     return executeSelectQuery(query, typeEntity);
 }
コード例 #2
0
 public void deleteEntity(Entity entity)
 {
     if (entity.ID == -1)
     {
         return;
     }
     Query query = new Query(entity.NameTable);
     query.addTypeQuery(TypeQuery.delete)
             .addCondition(Entity.PrimaryKey(), "=", entity.ID.ToString());
     executeDeleteQuery(query);
 }
コード例 #3
0
 public Entity entityById(int id, Type typeEntity)
 {
     Entity entity = (Entity)Activator.CreateInstance(typeEntity);
     Query query = new Query(entity.NameTable);
     query.addTypeQuery(TypeQuery.select)
             .addCondition(Entity.PrimaryKey(), "=", id.ToString());
     List<Entity> list = executeSelectQuery(query, typeEntity);
     if (list.Count > 0)
     {
         return list[0];
     }
     return null;
 }
コード例 #4
0
 public void saveEntity(Entity entity)
 {
     Query query = new Query(entity.NameTable);
     List<object> binaryArray = new List<object>();
     Dictionary<string, string> changedValues = new Dictionary<string, string>();
     PropertyInfo []properties = entity.GetType().GetProperties();
     Dictionary<string, string> mappingTable = entity.mappingTable();
     Dictionary<string, Type> serializationParameters = entity.serializationParameters();
     foreach (PropertyInfo property in properties)
     {
         if (mappingTable.ContainsKey(property.Name) && property.Name != Entity.PrimaryKey())
         {
             if (serializationParameters.ContainsKey(property.Name))//(property.GetValue(entity).GetType().IsArray && property.GetValue(entity).GetType().GetElementType() == typeof(byte))
             {
                 if (property.GetValue(entity) != null)
                 {
                     BinaryFormatter serializer = new BinaryFormatter();
                     changedValues.Add(mappingTable[property.Name], "@data" + binaryArray.Count.ToString());
                     using (var ms = new MemoryStream())
                     {
                         serializer.Serialize(ms, property.GetValue(entity));
                         binaryArray.Add(ms.ToArray());
                     }
                 }
             }
             else
             {
                 changedValues.Add(mappingTable[property.Name], property.GetValue(entity).ToString());
             }
         }
     }
     if (entity.ID == -1)
     {
         query.addTypeQuery(TypeQuery.insert);
     }
     else
     {
         query.addTypeQuery(TypeQuery.update)
             .addCondition(Entity.PrimaryKey(), "=", entity.ID.ToString());
     }
     query.setChangedValues(changedValues);
     int insertId = executeUpdateInsertQuery(query, binaryArray);
     if (entity.ID == -1)
     {
         entity.ID = insertId;
     }
 }
コード例 #5
0
 public List<Entity> entitiesByQuery(Query query, Type typeEntity)
 {
     return executeSelectQuery(query, typeEntity);
 }
コード例 #6
0
 private int executeUpdateInsertQuery(Query query, List<object>binaryObjects)
 {
     int insertId = 0;
     SQLiteCommand cmd = new SQLiteCommand(connection);
     cmd.CommandText = query.StatementForDatabase();
     foreach (object obj in binaryObjects)
     {
         SQLiteParameter parameter = new SQLiteParameter("@data" + binaryObjects.IndexOf(obj).ToString(), System.Data.DbType.Binary);
         parameter.Value = obj;
         cmd.Parameters.Add(parameter);
     }
     try
     {
         cmd.ExecuteNonQuery();
         string sql = @"select last_insert_rowid()";
         cmd.CommandText = sql;
         insertId = (int)(long)cmd.ExecuteScalar();
     }
     catch (SQLiteException ex)
     {
         Console.WriteLine(ex.Message);
         return 0;
     }
     return insertId;
 }
コード例 #7
0
        private List<Entity> executeSelectQuery(Query query, Type typeEntity)
        {
            List<Entity> res = null;
            SQLiteCommand cmd = new SQLiteCommand(connection);
            cmd.CommandText = query.StatementForDatabase();
            try
            {
                SQLiteDataReader r = cmd.ExecuteReader();
                string line = String.Empty;
                res = new List<Entity>();
                Entity entity;
                while (r.Read())
                {
                    entity = (Entity)Activator.CreateInstance(typeEntity);
                    Dictionary<string, string> mappingTable = entity.mappingTable();
                    Dictionary<string, Type> serializationParameters = entity.serializationParameters();
                    PropertyInfo[] properties = entity.GetType().GetProperties();
                    foreach (var item in mappingTable)
                    {
                        List<PropertyInfo>list = properties.Where(o => o.Name == item.Key).ToList();
                        if (list.Count > 0)
                        {
                            PropertyInfo property = list[0];
                            if (serializationParameters.ContainsKey(item.Value))
                            {
                                if (!(r[item.Value] is DBNull))
                                {
                                    BinaryFormatter deserializer = new BinaryFormatter();
                                    byte[] byteArray = (byte[])r[item.Value];
                                    using (var ms = new MemoryStream(byteArray, 0, byteArray.Length))
                                    {
                                        ms.Write(byteArray, 0, byteArray.Length);
                                        ms.Position = 0;
                                        object obj = deserializer.Deserialize(ms);
                                        property.SetValue(entity, obj);
                                    }
                                }
                            }
                            else
                            {
                                property.SetValue(entity, Convert.ChangeType(r[item.Value], property.PropertyType));
                            }

                        }
                    }
                    res.Add(entity);
                }
                r.Close();
            }
            catch (SQLiteException ex)
            {
                Console.WriteLine(ex.Message);
                return null;
            }
            return res;
        }
コード例 #8
0
 private void executeDeleteQuery(Query query)
 {
     SQLiteCommand cmd = new SQLiteCommand(connection);
     cmd.CommandText = query.StatementForDatabase();
     try
     {
         cmd.ExecuteNonQuery();
     }
     catch (SQLiteException ex)
     {
         Console.WriteLine(ex.Message);
     }
 }
コード例 #9
0
 public static List<Entity> where(Query query, Type typeEntity)
 {
     return DatabaseManager.SharedManager.entitiesByQuery(query, typeEntity);
 }