diff --git a/Database-Attribute_System/ClassAction.cs b/Database-Attribute_System/ClassAction.cs index 9c87aa2..7240e1e 100644 --- a/Database-Attribute_System/ClassAction.cs +++ b/Database-Attribute_System/ClassAction.cs @@ -36,7 +36,6 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System return cachedDbObject; } - /// /// Fills an given dbObject with given data /// Data-attribute-names and class-fieldNames have to match! (non case-sensitive) @@ -44,6 +43,21 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System /// /// Given object (marked with Db-attributes) /// The data + /// Key-name of data + public static void FillObject(T classObject, string key, object data) + { + Dictionary dicData = new Dictionary(); + dicData.Add(key, data); + FillObject(classObject, dicData); + } + /// + /// Fills an given dbObject with given data + /// Data-attribute-names and class-fieldNames have to match! (non case-sensitive) + /// + /// + /// Given object (marked with Db-attributes) + /// The data + /// Key-name of data public static void FillObject(T classObject, Dictionary data) { Type classType = classObject.GetType(); @@ -90,8 +104,11 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System /// Gets an dbObject by primaryKey/s /// /// - /// Given object (marked with Db-attributes) - /// Function to handle query-calls - Has to return Dictionary[attributeName, attributeValue] + /// The classType (marked with Db-attributes) + /// Name of the primaryKey + /// Value of the primaryKey + /// KeyData of multiple primaryKeys + /// Function to handle query-calls public static T GetByPrimaryKey(Type classType, object primaryKeyValue, Func>> queryExecutor) where T : new() { // Read dbObject-attribute @@ -102,6 +119,15 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System return GetByPrimaryKey(classType, dbObject.primaryKeyAttributes[0]._attributeName, primaryKeyValue, queryExecutor); } + /// + /// Gets an dbObject by primaryKey/s + /// + /// + /// The classType (marked with Db-attributes) + /// Name of the primaryKey + /// Value of the primaryKey + /// KeyData of multiple primaryKeys + /// Function to handle query-calls public static T GetByPrimaryKey(Type classType, string primaryKeyName, object primaryKeyValue, Func>> queryExecutor) where T : new() { Dictionary primaryKeyData = new Dictionary() { }; @@ -109,6 +135,15 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System return GetByPrimaryKey(classType, primaryKeyData, queryExecutor); } + /// + /// Gets an dbObject by primaryKey/s + /// + /// + /// The classType (marked with Db-attributes) + /// Name of the primaryKey + /// Value of the primaryKey + /// KeyData of multiple primaryKeys + /// Function to handle query-calls public static T GetByPrimaryKey(Type classType, Dictionary primaryKeyData, Func>> queryExecutor) where T: new() { // Read dbObject-attribute @@ -161,7 +196,7 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System /// /// /// Given object (marked with Db-attributes) - /// Function to handle query-calls - Has to return Dictionary[attributeName, attributeValue] + /// Function to handle query-calls public static List GetList(Type classType, Func>> queryExecutor) where T : new() { // Read dbObject - attribute @@ -181,13 +216,42 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System return objs; // Return list } + /// + /// Gets a list of dbObjects by attribute/s + /// + /// + /// Type of class + /// class-fields for select + /// Function to handle query-calls + /// List of dbObjects + public static List GetListByAttribute(Type classType, Dictionary fields, Func>> queryExecutor) where T : new() + { + // Read dbObject-attribute + DbObject dbObject = ClassAction.Init(classType); + + Function.ConvertAttributeToDbAttributes(classType, fields); + + string query = QueryBuilder.SelectByAttribute(dbObject._tableName, fields); // Generate query + List> dataSet = queryExecutor(query); // Execute + + List objs = new List() { }; + foreach (Dictionary data in dataSet) + { + T obj = new T(); // New object + FillObject(obj, data); // Fill it + objs.Add(obj); // Add to list + } + + return objs; // Return list + } + /// /// Gets an dbObject by custom where-clause /// /// /// Given object (marked with Db-attributes) /// Custom where-clause params attached to query (SELECT * FROM tableName WHERE whereClause) - /// Function to handle query-calls - Has to return Dictionary[attributeName, attributeValue] + /// Function to handle query-calls public static List GetListWithWhere(Type classType, Func>> queryExecutor, params object[] whereClause) where T : new() { // Read dbObject - attribute @@ -213,7 +277,7 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System /// /// Given object (marked with Db-attributes) /// Custom sql-query - /// Function to handle query-calls - Has to return Dictionary[attributeName, attributeValue] + /// Function to handle query-calls public static List GetListWithQuery(Type classType, Func>> queryExecutor, params object[] customQuery) where T : new() { // Read dbObject - attribute @@ -233,36 +297,6 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System return objs; // Return list } - - /// - /// Gets a list of dbObjects by attribute/s - /// - /// - /// Type of class - /// class-fields for select - /// Function to handle query-calls - Has to return Dictionary[attributeName, attributeValue] - /// List of dbObjects - public static List GetListByAttribute(Type classType, Dictionary fields, Func>> queryExecutor) where T : new() - { - // Read dbObject-attribute - DbObject dbObject = ClassAction.Init(classType); - - Function.ConvertAttributeToDbAttributes(classType, fields); - - string query = QueryBuilder.SelectByAttribute(dbObject._tableName, fields); // Generate query - List> dataSet = queryExecutor(query); // Execute - - List objs = new List() { }; - foreach(Dictionary data in dataSet) - { - T obj = new T(); // New object - FillObject(obj, data); // Fill it - objs.Add(obj); // Add to list - } - - return objs; // Return list - } - // ----- /// @@ -271,7 +305,7 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System /// /// /// Given object (marked with Db-attributes) - /// Function to handle query-calls - Has to return Dictionary[attributeName, attributeValue] + /// Function to handle query-calls public static void ResolveByPrimaryKey(T classObject, Func>> queryExecutor, bool throwExceptions = true) { string query = QueryBuilder.SelectByPrimaryKey(classObject); // Generate query @@ -290,7 +324,7 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System /// /// /// Given object (marked with Db-attributes) - /// Function to handle query-calls - Has to return Dictionary[attributeName, attributeValue] + /// Function to handle query-calls /// Determents how deep resolving will be executed public static void ResolveForeignKeys(T classObject, Func>> queryExecutor, int max_depth = 1) where T: new() { @@ -473,7 +507,7 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System /// /// /// Given object (marked with Db-attributes) - /// Function to handle query-calls - Has to return Dictionary[attributeName, attributeValue] + /// Function to handle query-calls /// Determents how deep resolving will be executed (if the corresponding foreignKey-object is resolved) public static void Update(T classObject, Func>> queryExecutor, int max_depth = 1) { @@ -500,7 +534,7 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System /// /// /// Given object (marked with Db-attributes) - /// Function to handle query-calls - Has to return Dictionary[attributeName, attributeValue] + /// Function to handle query-calls /// Determents how deep insertion will be executed (if the corresponding foreignKey-object is resolved) public static void Insert(T classObject, Func>> queryExecutor, int max_depth = 1) { @@ -528,7 +562,7 @@ namespace eu.railduction.netcore.dll.Database_Attribute_System /// /// /// Given object (marked with Db-attributes) - /// Function to handle query-calls - Has to return Dictionary[attributeName, attributeValue] + /// Function to handle query-calls /// Determents how deep deletion will be executed (if the corresponding foreignKey-object is resolved) public static void Delete(T classObject, Func>> queryExecutor, int max_depth = 1) {