/// <summary> /// 实体属性转换成字典 /// </summary> /// <param name="entity"></param> private void EntityToDictionary <Entity>(Entity entity) { var serializer = DbContextBehavior.GetEntityToDictionaryHandler(typeof(Entity)); var values = serializer(entity); foreach (var item in values) { if (_parameters.ContainsKey(item.Key)) { _parameters[item.Key] = item.Value; } else { _parameters.Add(item.Key, item.Value); } } }
private void EntitiesToDictionary <Entity>(IEnumerable <Entity> entities) { var serializer = DbContextBehavior.GetEntityToDictionaryHandler(typeof(Entity)); foreach (var entity in entities) { var values = serializer(entity); foreach (var iitem in values) { if (_parameters.ContainsKey(iitem.Key)) { (_parameters[iitem.Key] as List <object>).Add(iitem.Value); } else { var list = new List <object> { iitem.Value }; _parameters.Add(iitem.Key, list); } } } }
/// <summary> /// 构建批量新增命令 /// </summary> /// <param name="entitys"></param> /// <returns></returns> private string BuildBatchInsertCommand(IEnumerable <T> entitys) { var table = GetViewName(); var filters = BuildIgnoreExpression(); var intcolumns = _columns .Where(a => !a.IsComplexType) .Where(a => !filters.Contains(a.ColumnName)) .Where(a => !a.IsNotMapped) .Where(a => !a.IsIdentity) .ToList(); var columnNames = string.Join(",", intcolumns.Select(s => s.ColumnName)); if (_context.DbContextType == DbContextType.Mysql) { var buffer = new StringBuilder(); buffer.Append($"INSERT INTO {table}({columnNames}) VALUES "); var serializer = DbContextBehavior.GetEntityToDictionaryHandler(typeof(T)); var list = entitys.ToList(); for (var i = 0; i < list.Count; i++) { var item = list[i]; var values = serializer(item); buffer.Append('('); for (var j = 0; j < intcolumns.Count; j++) { var column = intcolumns[j]; var value = values[column.CsharpName]; if (value == null) { buffer.Append(column.IsDefault ? "DEFAULT" : "NULL"); } else if (column.CsharpType == typeof(bool) || column.CsharpType == typeof(bool?)) { buffer.Append(Convert.ToBoolean(value) == true ? 1 : 0); } else if (column.CsharpType == typeof(Guid) || column.CsharpType == typeof(Guid?)) { buffer.Append($"'{value}'"); } else if (column.CsharpType == typeof(byte[])) { var bytes = value as byte[]; var hexstr = string.Join("", bytes.Select(s => Convert.ToString(s, 16).PadLeft(2, '0'))); buffer.Append($"0x{hexstr}"); } else if (column.CsharpType == typeof(DateTime) || column.CsharpType == typeof(DateTime?)) { buffer.Append($"'{value}'"); } else if (column.CsharpType.IsValueType || (Nullable.GetUnderlyingType(column.CsharpType)?.IsValueType == true)) { buffer.Append(value); } else { var str = CheckSql(value.ToString()); buffer.Append($"'{str}'"); } if (j + 1 < intcolumns.Count) { buffer.Append(','); } } buffer.Append(')'); if (i + 1 < list.Count) { buffer.Append(','); } } return(buffer.Remove(buffer.Length - 1, 0).ToString()); } throw new NotImplementedException(); }