コード例 #1
0
        private string GenerateInsertSql()
        {
            Type type = typeof(T);

            string tableName       = type.GetCustomAttribute <TableAttribute>().Name;
            Type   ignoreAttribute = typeof(IgnoreInsertAttribute);

            PropertyInfo[]             properties = type.GetProperties();
            IEnumerable <PropertyInfo> fields     =
                properties.Where(x => x.GetCustomAttributes().All(y => ignoreAttribute != y.GetType()));
            IEnumerable <OrmResult.Parameter> parameters = from item in fields
                                                           select new OrmResult.Parameter
            {
                FieldName     = item.GetCustomAttribute <ColumnAttribute>().Name,
                ParameterName = item.Name
            };

            OrmResult orm = new OrmResult
            {
                TableName  = tableName,
                Parameters = parameters.ToList()
            };
            string sql = $"INSERT INTO {orm.TableName}({string.Join(", ", orm.Parameters.Select(x => x.FieldName))}) " +
                         $"VALUES(@{string.Join(", @", orm.Parameters.Select(x => x.ParameterName))})";

            return(sql);
        }
コード例 #2
0
        private string GenerateWhereClause(object entity)
        {
            string tableName = typeof(T).Name;

            PropertyInfo[] entityProperties = entity.GetType()
                                              .GetProperties();
            var field = typeof(T).GetProperties()
                        .Where(x => entityProperties.Any(y => y.Name == x.Name))
                        .Select(x => new { CustomAttribute = x.GetCustomAttribute <ColumnAttribute>().Name, FieldName = x.Name });
            IEnumerable <OrmResult.Parameter> parameters = from item in entityProperties
                                                           select new OrmResult.Parameter
            {
                FieldName     = field.First(x => x.FieldName == item.Name).CustomAttribute,
                ParameterName = item.Name
            };

            OrmResult orm = new OrmResult
            {
                TableName  = tableName,
                Parameters = parameters.ToList()
            };

            List <string> clause = new List <string>();

            for (int i = 0; i < orm.Parameters.Count; i++)
            {
                bool isArray = entityProperties.ElementAt(i).PropertyType.IsArray;

                if (isArray)
                {
                    clause.Add($"{orm.Parameters[i].FieldName} = ANY(@{orm.Parameters[i].ParameterName} )");
                }
                else
                {
                    clause.Add($"{orm.Parameters[i].FieldName} = @{orm.Parameters[i].ParameterName} ");
                }
            }

            string result = $"WHERE {string.Join(" AND ", clause)}";

            return(result);
        }
コード例 #3
0
        protected override OrmResult MappedCheckExists <T>(T objModel)
        {
            OrmResult result = null;

            if (objModel != null)
            {
                StringBuilder sqlText = new StringBuilder();
                Dictionary <string, DbParameter> parameters = new Dictionary <string, DbParameter>();

                OrmModel objMappedModel = this.GetMappedModel <T>();

                /**/

                sqlText.Append("select count(*) from `{Table}` where 1 = 1 {Where}");

                sqlText.Replace("{Table}", objMappedModel.Table.TableName);

                /**/

                StringBuilder whereText = new StringBuilder();

                string         parameterName  = null;
                object         parameterValue = null;
                MySqlParameter parameter      = null;

                foreach (KeyValuePair <string, OrmColumnAttribute> column in objMappedModel.Columns)
                {
                    if (column.Value.IsUnique)
                    {
                        parameterName  = this.DbCharacter + column.Value.ColumName;
                        parameterValue = column.Value.MappedPropertyInfo.GetValue(objModel, null);

                        parameter       = new MySqlParameter(parameterName, column.Value.MySqlDataType);
                        parameter.Value = parameterValue;

                        parameters.Add(parameterName, parameter);

                        /**/

                        whereText.Append(" and " + column.Value.ColumName + " = " + parameterName);
                    }
                }

                sqlText.Replace("{Where}", whereText.ToString());

                result = new OrmResult(sqlText.ToString(), parameters);
            }

            return(result);
        }

        protected override OrmResult MappedInsert <T>(T objModel)
        {
            OrmResult result = null;

            if (objModel != null)
            {
                StringBuilder sqlText = new StringBuilder();
                Dictionary <string, DbParameter> parameters = new Dictionary <string, DbParameter>();

                OrmModel objMappedModel = this.GetMappedModel <T>();

                /**/

                sqlText.Append("insert into `{Table}`({Column}) values({Value})");

                sqlText.Replace("{Table}", objMappedModel.Table.TableName);

                /**/

                StringBuilder columnText = new StringBuilder();
                StringBuilder valueText  = new StringBuilder();

                string         parameterName  = null;
                object         parameterValue = null;
                MySqlParameter parameter      = null;

                foreach (KeyValuePair <string, OrmColumnAttribute> column in objMappedModel.Columns)
                {
                    if (!column.Value.IsAutoincrement && column.Value.IsInsert)
                    {
                        parameterName  = this.DbCharacter + column.Value.ColumName;
                        parameterValue = column.Value.MappedPropertyInfo.GetValue(objModel, null);

                        if (parameterValue != null || (!column.Value.IsNullable))
                        {
                            parameter       = new MySqlParameter(parameterName, column.Value.MySqlDataType);
                            parameter.Value = parameterValue;

                            parameters.Add(parameterName, parameter);

                            /**/

                            columnText.Append(column.Value.ColumName + ", ");
                            valueText.Append(parameterName + ", ");
                        }
                    }
                }

                columnText.Remove(columnText.Length - 2, 2);
                valueText.Remove(valueText.Length - 2, 2);

                sqlText.Replace("{Column}", columnText.ToString());
                sqlText.Replace("{Value}", valueText.ToString());

                result = new OrmResult(sqlText.ToString(), parameters);
            }