internal static SQLDMLStatement GetDMLStatementForGenericEntity(IDatabaseTenant Tenant, object Entity, DMLStatemtType dMLStatemtType, List <string> querProperytParametersToUse)
        {
            List <object> propValues = GetObjectPropertyValues(Entity);
            List <string> propNames  = GetObjectPropertyNames(Entity);

            List <ISQLDMLStatementVariable> uniqueKeys = null;

            if (dMLStatemtType == DMLStatemtType.SelectAll && querProperytParametersToUse == null)
            {
                uniqueKeys = new List <ISQLDMLStatementVariable>
                {
                    new SQLDMLStatementVariable {
                        Name = "@Tenant", Value = "TR1"
                    }
                };
            }
            else if (querProperytParametersToUse == null)
            {
                EntityDescriber ed = new EntityDescriber(Entity);
                bool            primaryKeyIdFieldValueSupplied = ed.PrimaryKeyProvidedOnEntity();

                if (primaryKeyIdFieldValueSupplied && (dMLStatemtType == DMLStatemtType.Update || dMLStatemtType == DMLStatemtType.Delete))
                {
                    uniqueKeys = GetUniqueKeyNameValuePairs(Entity, true, false);
                }
                else if (primaryKeyIdFieldValueSupplied == false && (dMLStatemtType == DMLStatemtType.Update || dMLStatemtType == DMLStatemtType.Delete))
                {
                    uniqueKeys = GetUniqueKeyNameValuePairs(Entity, false, true);
                }
                else
                {
                    uniqueKeys = GetUniqueKeyNameValuePairs(Entity, false, true);
                }
            }
            else
            {
                uniqueKeys = GetFilterNameValuePairs(Entity);
            }

            List <ISQLDMLStatementVariable> uniqueKeysFiltered = new List <ISQLDMLStatementVariable>();

            if (querProperytParametersToUse != null)
            {
                querProperytParametersToUse.Add("Tenant");
                foreach (var key in uniqueKeys)
                {
                    if (querProperytParametersToUse.Contains(key.Name.Replace("@", "")))
                    {
                        uniqueKeysFiltered.Add(key);
                    }
                }
            }
            else
            {
                uniqueKeysFiltered = uniqueKeys;
            }


            SQLDMLScripts dmlScripts = new SQLDMLScripts();

            return(dmlScripts.GetInsertScriptForTypedEntity(Tenant, Entity, propNames, propValues, dMLStatemtType, uniqueKeysFiltered));
        }