/// <summary> /// Gets the root express value. /// </summary> /// <param name="expression">The expression.</param> /// <returns>An object.</returns> private object GetRootExpressValue(MemberExpression expression) { if (expression.Expression is MemberExpression memberExpression) { var obj = GetRootExpressValue(memberExpression); // return obj; if (expression.Member is PropertyInfo propertyInfo && obj is ObjectValue valueObj) { return(new ObjectValue(propertyInfo.GetGetMethod().Invoke(valueObj.Value, null))); } } else if (expression.Expression is ParameterExpression parameterExpression) { return(parameterExpression.Type); } else if (expression.Expression is ConstantExpression constantExpression) { if (expression.Member is FieldInfo) { return(new ObjectValue((expression.Member as FieldInfo)?.GetValue(constantExpression.Value))); } } else if (expression.Expression is UnaryExpression unary && unary.Operand is ParameterExpression unaryParamExpression) { string tableName = TableUtlis.GetTableName(unaryParamExpression.Type); return($"{_dbPrivoder.FormatFieldName(tableName)}.{_dbPrivoder.FormatFieldName(expression.Member.Name)}"); } return(null); }
public async Task <long> CreateTableForceAsync <T>(string databaseName = "") { var tableName = TableUtlis.GetTableName <T>(); await DeleteTableAsync(tableName, databaseName); return(await CreateTableAsync <T>()); }
public void TestGetTableNameByType() { var name = TableUtlis.GetTableName(typeof(B)); Assert.AreEqual("aaa", name); }
public void TestGetTableNameByTableAttribute() { var name = TableUtlis.GetTableName <B>(); Assert.AreEqual("aaa", name); }
public void TestGetTableNameByClass() { var name = TableUtlis.GetTableName <A>(); Assert.AreEqual("A", name); }
public Task <int> RenameColumnAsync <T>(string columnName, string newcolumnName, TypeCode typeName, bool isNotNull, int length, string databaseName = "") { var tableName = TableUtlis.GetTableName <T>(); return(RenameColumnAsync(tableName, columnName, newcolumnName, typeName, isNotNull, length, databaseName)); }
/// <summary> /// Are the exist column async. /// </summary> /// <param name="columnName">The column name.</param> /// <param name="databaseName"></param> /// <returns>A Task.</returns> public Task <bool> IsExistColumnAsync <T>(string columnName, string databaseName = "") { var tableName = TableUtlis.GetTableName <T>(); return(IsExistColumnAsync(tableName, columnName, databaseName)); }
public Task <int> DeleteColumnAsync <T>(string columnName, string databaseName = "") { var tableName = TableUtlis.GetTableName <T>(); return(DeleteColumnAsync(tableName, columnName, databaseName)); }
/// <summary> /// Builds the create table. /// </summary> /// <param name="createTableSql">The create table sql.</param> /// <returns>An ISqlResult.</returns> protected override ISqlResult BuildCreateTable(CreateTableSql createTableSql) { var r = new ParmsSqlResult(); var type = createTableSql.TableType; var typeInfo = type.GetTypeInfo(); var props = typeInfo.GetRuntimeProperties(); var columSqls = new List <string>(); var tableName = TableUtlis.GetTableName(type); var keys = new List <string>(); foreach (var item in props) { var pType = item.PropertyType.Name; var isNullType = false; if (item.PropertyType.Name == typeof(Nullable <>).Name) { isNullType = true; pType = item.PropertyType.GenericTypeArguments[0].Name; } var aType = _typeMap.GetSqlType(pType); var columSql = $"{item.Name} {aType}"; if (item.Name == "SequenceId") { columSql = $"SequenceId int AUTO_INCREMENT"; var indexSql = "UNIQUE KEY(SequenceId)"; columSqls.Add(columSql); columSqls.Add(indexSql); continue; } else if (item.Name == "Id") { columSql = $"Id nvarchar(36)"; columSqls.Add(columSql); continue; } var igAttribute = item.GetCustomAttribute(typeof(IngoreAttribute), true); if (igAttribute != null) { continue; } if (item.GetCustomAttribute(typeof(ColumnAttribute), true) is ColumnAttribute columnAttribute) { if (string.IsNullOrWhiteSpace(columnAttribute.Name)) { columSql = columSql.Replace(item.Name, columnAttribute.Name); } if (pType == nameof(TypeCode.Double) || pType == nameof(TypeCode.Single)) { var length = columnAttribute.Length == -1 ? 15 : columnAttribute.Length; columSql = $"{columSql}({length},6)"; } else if (pType == nameof(TypeCode.DateTime) || pType == nameof(TypeCode.Byte)) { var length = columnAttribute.Length < 36 ? 0 : columnAttribute.Length; columSql = $"{columSql}({length})"; } else if (pType == typeof(Guid).Name) { columSql = $"{columSql}"; } else { var length = columnAttribute.Length == -1 ? 255 : columnAttribute.Length; columSql = $"{columSql}({length})"; } } else { if (pType == nameof(TypeCode.Double) || pType == nameof(TypeCode.Single)) { columSql = $"{columSql}(15,6)"; } else if (pType == nameof(TypeCode.DateTime) || pType == nameof(TypeCode.Byte) || pType == nameof(TypeCode.Int32) || pType == nameof(TypeCode.Int64) || pType == nameof(TypeCode.Decimal)) { columSql = $"{columSql}"; } else if (pType == typeof(Guid).Name) { columSql = $"{columSql}(36)"; } else { columSql = $"{columSql}(255)"; } } if (item.GetCustomAttribute(typeof(KeyAttribute), true) is KeyAttribute _) { keys.Add(item.Name); } var isNotNullAttribute = item.GetCustomAttribute(typeof(NotNullAttribute), true); if (item.PropertyType == typeof(string) && isNotNullAttribute == null) { isNullType = true; } else if (isNotNullAttribute != null && isNullType) { throw new NotSupportedException("可空类型不能被NotNull标记"); } else if (!isNullType) { columSql = $"{columSql} not null"; } columSqls.Add(columSql); } if (keys.Count == 0) { columSqls.Add($"PRIMARY KEY ( Id )"); } else if (keys.Count == 1) { columSqls.Add($"PRIMARY KEY ( {keys[0]} )"); } else { throw new NotSupportedException("暂时不支持联合主键,请使用联合唯一索引代替"); } if (string.IsNullOrWhiteSpace(tableName)) { throw new Exception("当前TabelName的值为null 无法创建表"); } var sql = $@"create table if not exists {tableName}({string.Join(",", columSqls)})"; r.SQL = sql; return(r); }
/// <summary> /// Are the exist table. /// </summary> /// <returns>A bool.</returns> public virtual Task <bool> IsExistTableAsync <T>(string databaseName = "") { var tableName = TableUtlis.GetTableName <T>(); return(IsExistTableAsync(tableName, databaseName)); }
/// <summary> /// Sets the table name. /// </summary> /// <param name="tableType">The table type.</param> public void SetTableName(Type tableType) { joinTable = _dbPrivoder.FormatFieldName(TableUtlis.GetTableName(tableType)); }