예제 #1
0
        /// <summary>
        /// Get object by ID
        /// Primary Key attribute must be set
        /// </summary>
        /// <param name="id"></param>
        /// <param name="repository"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        internal static object GetSqlById(long id, ICustomRepository repository, Type type)
        {
            var sqlKey = type.GetActualType().FullName + "GetById";

            if (!CachedSql.ContainsKey(sqlKey))
            {
                var key = type.GetActualType().GetPrimaryKey().GetPropertyName();
                CachedSql.Add(sqlKey, Querys.Select(type.GetActualType(), repository.GetDataBaseType() == DataBaseTypes.Sqllight).Where.Column <long>(key).Equal("@ID", true).Execute());
            }
            var cmd = repository.GetSqlCommand(CachedSql[sqlKey]);

            repository.AddInnerParameter(cmd, "@ID", id, System.Data.SqlDbType.BigInt);
            if (type.IsGenericType && type.GetGenericTypeDefinition()?.Name == "List`1" && type.GenericTypeArguments.Length > 0)
            {
                return(repository.GetLightDataTable(cmd).Rows.ToObject(type));
            }
            return(repository.GetLightDataTable(cmd).Rows.FirstOrDefault()?.ToObject(type));
        }
예제 #2
0
        /// <summary>
        /// Get all by object
        /// PrimaryKey attr must be set
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="repository"></param>
        /// <param name="quary"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        internal static IList GetSqlAll(ICustomRepository repository, Type type)
        {
            var sqlKey = type.FullName + "GetSqlAll";

            if (!CachedSql.ContainsKey(sqlKey))
            {
                CachedSql.Add(sqlKey, Querys.Select(type, repository.GetDataBaseType() == DataBaseTypes.Sqllight).Execute());
            }
            return(repository.GetLightDataTable(repository.GetSqlCommand(CachedSql[sqlKey])).Rows.ToObject(type));
        }
예제 #3
0
        /// <summary>
        /// Get all by object
        /// Get object by column, as fogenKey
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="column"></param>
        /// <param name="repository"></param>
        /// <param name="quary"></param>
        /// <param name="id"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        private static object GetByColumn(long id, string column, ICustomRepository repository, Type type)
        {
            var sqlKey = type.FullName + "GetByColumn" + column;

            if (!CachedSql.ContainsKey(sqlKey))
            {
                CachedSql.Add(sqlKey, Querys.Select(type).Where.Column <long>(column).Equal("@ID", true).Execute());
            }

            var cmd = repository.GetSqlCommand(CachedSql[sqlKey]);

            repository.AddInnerParameter(cmd, "@ID", id, System.Data.SqlDbType.BigInt);
            if (type.IsGenericType && type.GetGenericTypeDefinition()?.Name == "List`1" && type.GenericTypeArguments.Length > 0)
            {
                return(repository.GetLightDataTable(cmd).Rows.ToObject(type));
            }

            return(repository.GetLightDataTable(cmd).Rows.FirstOrDefault()?.ToObject(type));
        }
예제 #4
0
        internal static ILightDataTable Select(ICustomRepository repository, Type type, QueryItem quary = null)
        {
            var sql = new StringBuilder();

            sql.Append(Querys.Select(type, repository.GetDataBaseType() == DataBaseTypes.Sqllight).Execute());
            if (quary != null && quary.HasValue())
            {
                sql.Append(quary.Execute());
            }

            return(repository.GetLightDataTable(repository.GetSqlCommand(sql.ToString())));
        }
예제 #5
0
        /// <summary>
        /// Get all by object
        /// PrimaryKey attr must be set ins Where
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="repository"></param>
        /// <param name="quary"></param>
        /// <returns></returns>

        internal static List <T> Where <T>(ICustomRepository repository, string quary = null) where T : class
        {
            var type = typeof(T);
            var sql  = new StringBuilder();

            sql.Append(Querys.Select(type, repository.GetDataBaseType() == DataBaseTypes.Sqllight).Execute());
            if (!string.IsNullOrEmpty(quary))
            {
                sql = new StringBuilder(quary);
            }

            return(repository.GetLightDataTable(repository.GetSqlCommand(sql.ToString())).Rows.ToObject <T>());
        }
예제 #6
0
        /// <summary>
        /// Get all by object
        /// PrimaryKey attr must be set ins Where
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="repository"></param>
        /// <param name="quary"></param>
        /// <returns></returns>

        internal static List <T> Select <T>(ICustomRepository repository, QueryItem quary = null) where T : class
        {
            var type = typeof(T);
            var sql  = new StringBuilder();

            sql.Append(Querys.Select(type, repository.GetDataBaseType() == DataBaseTypes.Sqllight).Execute());
            if (quary != null && quary.HasValue())
            {
                sql.Append(quary.Execute());
            }

            return(repository.GetLightDataTable(repository.GetSqlCommand(sql.ToString())).Rows.ToObject <T>());
        }
예제 #7
0
        private static ILightDataTable ObjectColumns(this ICustomRepository repository, Type type)
        {
            if (CachedObjectColumn.ContainsKey(type))
            {
                return(CachedObjectColumn[type]);
            }
            var table = type.GetCustomAttribute <Table>()?.Name ?? type.Name;
            var cmd   = repository.GetSqlCommand("SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'" + table + "'");
            var data  = repository.GetLightDataTable(cmd, "COLUMN_NAME");

            CachedObjectColumn.Add(type, data);
            return(CachedObjectColumn[type]);
        }
예제 #8
0
        private static ILightDataTable ObjectColumns(this ICustomRepository repository, Type type)
        {
            if (CachedObjectColumn.ContainsKey(type))
            {
                return(CachedObjectColumn[type]);
            }
            var table = type.GetCustomAttribute <Table>()?.Name ?? type.Name;
            var cmd   = repository.GetSqlCommand(repository.GetDataBaseType() == DataBaseTypes.Mssql ?
                                                 "SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'" + table + "'"
                : "SELECT name as COLUMN_NAME, type as DATA_TYPE  FROM pragma_table_info('" + table + "');");
            var data = repository.GetLightDataTable(cmd, "COLUMN_NAME");

            if (data.Rows.Any())
            {
                CachedObjectColumn.Add(type, data);
            }
            else
            {
                return(data);
            }
            return(CachedObjectColumn[type]);
        }