public static void AuditDataValue(object sender, T1 data, IFreeSql orm, TableInfo table, Dictionary <string, bool> changedDict) { if (data == null) { return; } foreach (var col in table.Columns.Values) { object val = col.GetMapValue(data); if (col.Attribute.IsPrimary && col.Attribute.MapType.NullableTypeOrThis() == typeof(Guid) && (val == null || (Guid)val == Guid.Empty)) { col.SetMapValue(data, val = FreeUtil.NewMongodbId()); } if (orm.Aop.AuditValue != null) { var auditArgs = new Aop.AuditValueEventArgs(Aop.AuditValueType.Insert, col, table.Properties[col.CsName], val); orm.Aop.AuditValue(sender, auditArgs); if (auditArgs.IsChanged) { col.SetMapValue(data, val = auditArgs.Value); if (changedDict != null && changedDict.ContainsKey(col.Attribute.Name) == false) { changedDict.Add(col.Attribute.Name, true); } } } } }
public static void AuditDataValue(object sender, T1 data, IFreeSql orm, TableInfo table, Dictionary <string, bool> changedDict) { if (data == null) { return; } if (typeof(T1) == typeof(object) && new[] { table.Type, table.TypeLazy }.Contains(data.GetType()) == false) { throw new Exception($"操作的数据类型({data.GetType().DisplayCsharp()}) 与 AsType({table.Type.DisplayCsharp()}) 不一致,请检查。"); } foreach (var col in table.Columns.Values) { object val = col.GetValue(data); if (orm.Aop.AuditValueHandler != null) { var auditArgs = new Aop.AuditValueEventArgs(Aop.AuditValueType.Insert, col, table.Properties[col.CsName], val); orm.Aop.AuditValueHandler(sender, auditArgs); if (auditArgs.ValueIsChanged) { col.SetValue(data, val = auditArgs.Value); if (changedDict != null && changedDict.ContainsKey(col.Attribute.Name) == false) { changedDict.Add(col.Attribute.Name, true); } } } if (col.Attribute.IsPrimary) { val = col.GetDbValue(data); if (col.Attribute.MapType.NullableTypeOrThis() == typeof(Guid) && (val == null || (Guid)val == Guid.Empty)) { col.SetValue(data, val = FreeUtil.NewMongodbId()); } else if (col.CsType.NullableTypeOrThis() == typeof(Guid)) { val = col.GetValue(data); if (val == null || (Guid)val == Guid.Empty) { col.SetValue(data, val = FreeUtil.NewMongodbId()); } } } if (val == null && col.Attribute.MapType == typeof(string) && col.Attribute.IsNullable == false) { col.SetValue(data, val = ""); } if (val == null && col.Attribute.MapType == typeof(byte[]) && col.Attribute.IsVersion) { col.SetValue(data, val = Utils.GuidToBytes(Guid.NewGuid())); } } }
public override string ToSql() { if (_source == null || _source.Any() == false) { return(null); } var sb = new StringBuilder(); sb.Append("INSERT "); if (_source.Count > 1) { sb.Append("ALL"); } _identCol = null; var sbtb = new StringBuilder(); sbtb.Append("INTO "); sbtb.Append(_commonUtils.QuoteSqlName(_tableRule?.Invoke(_table.DbName) ?? _table.DbName)).Append("("); var colidx = 0; foreach (var col in _table.Columns.Values) { if (col.Attribute.IsIdentity) { _identCol = col; } if (_ignore.ContainsKey(col.Attribute.Name)) { continue; } if (col.Attribute.IsIdentity && _insertIdentity == false) { continue; } if (colidx > 0) { sbtb.Append(", "); } sbtb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)); ++colidx; } sbtb.Append(") "); _params = _noneParameter ? new DbParameter[0] : new DbParameter[colidx * _source.Count]; var specialParams = new List <DbParameter>(); var didx = 0; foreach (var d in _source) { if (_source.Count > 1) { sb.Append("\r\n"); } sb.Append(sbtb); sb.Append("VALUES"); sb.Append("("); var colidx2 = 0; foreach (var col in _table.Columns.Values) { if (_ignore.ContainsKey(col.Attribute.Name)) { continue; } if (col.Attribute.IsIdentity && _insertIdentity == false) { continue; } if (colidx2 > 0) { sb.Append(", "); } object val = col.GetMapValue(d); if (col.Attribute.IsPrimary && col.Attribute.MapType.NullableTypeOrThis() == typeof(Guid) && (val == null || (Guid)val == Guid.Empty)) { col.SetMapValue(d, val = FreeUtil.NewMongodbId()); } if (_noneParameter) { sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, col.Attribute.MapType, val)); } else { sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}"))); _params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}_{didx}", col.Attribute.MapType, val); } ++colidx2; } sb.Append(")"); ++didx; } if (_source.Count > 1) { sb.Append("\r\n SELECT 1 FROM DUAL"); } return(sb.ToString()); }
public virtual string ToSql() { if (_source == null || _source.Any() == false) { return(null); } var sb = new StringBuilder(); sb.Append("INSERT INTO ").Append(_commonUtils.QuoteSqlName(_tableRule?.Invoke(_table.DbName) ?? _table.DbName)).Append("("); var colidx = 0; foreach (var col in _table.Columns.Values) { if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name) == false) { if (colidx > 0) { sb.Append(", "); } sb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)); ++colidx; } } sb.Append(") VALUES"); _params = _noneParameter ? new DbParameter[0] : new DbParameter[colidx * _source.Count]; var specialParams = new List <DbParameter>(); var didx = 0; foreach (var d in _source) { if (didx > 0) { sb.Append(", "); } sb.Append("("); var colidx2 = 0; foreach (var col in _table.Columns.Values) { if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name) == false) { if (colidx2 > 0) { sb.Append(", "); } object val = null; if (_table.Properties.TryGetValue(col.CsName, out var tryp)) { val = tryp.GetValue(d); if (col.Attribute.IsPrimary && (col.CsType == typeof(Guid) || col.CsType == typeof(Guid?)) && (val == null || (Guid)val == Guid.Empty)) { tryp.SetValue(d, val = FreeUtil.NewMongodbId()); } } if (_noneParameter) { sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, col.CsType, val)); } else { sb.Append(_commonUtils.QuoteWriteParamter(col.CsType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}"))); _params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}_{didx}", col.CsType, val); } ++colidx2; } } sb.Append(")"); ++didx; } if (_noneParameter && specialParams.Any()) { _params = specialParams.ToArray(); } return(sb.ToString()); }
public override string ToSql() { if (_source == null || _source.Any() == false) { return(null); } var sb = new StringBuilder(); sb.Append("INSERT "); if (_source.Count > 1) { sb.Append("ALL"); } _identCol = null; var sbtb = new StringBuilder(); sbtb.Append("INTO "); sbtb.Append(_commonUtils.QuoteSqlName(_tableRule?.Invoke(_table.DbName) ?? _table.DbName)).Append("("); var colidx = 0; foreach (var col in _table.Columns.Values) { if (col.Attribute.IsIdentity == true) { _identCol = col; continue; } if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name) == false) { if (colidx > 0) { sbtb.Append(", "); } sbtb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)); ++colidx; } } sbtb.Append(") "); _params = new DbParameter[colidx * _source.Count]; var didx = 0; foreach (var d in _source) { if (_source.Count > 1) { sb.Append("\r\n"); } sb.Append(sbtb); sb.Append("VALUES"); sb.Append("("); var colidx2 = 0; foreach (var col in _table.Columns.Values) { if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name) == false) { if (colidx2 > 0) { sb.Append(", "); } sb.Append(_commonUtils.QuoteWriteParamter(col.CsType, $"{_commonUtils.QuoteParamterName(col.CsName)}{didx}")); object val = null; if (_table.Properties.TryGetValue(col.CsName, out var tryp)) { val = tryp.GetValue(d); if (col.Attribute.IsPrimary && (col.CsType == typeof(Guid) || col.CsType == typeof(Guid?)) && (val == null || (Guid)val == Guid.Empty)) { tryp.SetValue(d, val = FreeUtil.NewMongodbId()); } } _params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}{didx}", col.CsType, val); ++colidx2; } } sb.Append(")"); ++didx; } if (_source.Count > 1) { sb.Append("\r\n SELECT 1 FROM DUAL"); } return(sb.ToString()); }
public void Enum1() { g.sqlserver.Aop.AuditValue += new EventHandler <FreeSql.Aop.AuditValueEventArgs>((s, e) => { if (e.Column.CsType == typeof(Guid) && e.Column.Attribute.MapType == typeof(string) && e.Value?.ToString() == Guid.Empty.ToString()) { e.Value = FreeUtil.NewMongodbId(); } }); g.sqlserver.GetRepository <ToStringMap>().InsertOrUpdate(new ToStringMap { }); //insert var orm = g.sqlserver; var item = new ToStringMap { }; Assert.Equal(1, orm.Insert <ToStringMap>().AppendData(item).ExecuteAffrows()); var find = orm.Select <ToStringMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.中国人).First(); Assert.NotNull(find); Assert.Equal(item.id, find.id); Assert.Equal(item.enum_to_string, find.enum_to_string); Assert.Equal(ToStringMapEnum.中国人, find.enum_to_string); item = new ToStringMap { enum_to_string = ToStringMapEnum.abc }; Assert.Equal(1, orm.Insert <ToStringMap>().AppendData(item).ExecuteAffrows()); find = orm.Select <ToStringMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.abc).First(); Assert.NotNull(find); Assert.Equal(item.id, find.id); Assert.Equal(item.enum_to_string, find.enum_to_string); Assert.Equal(ToStringMapEnum.abc, find.enum_to_string); //update all item.enum_to_string = ToStringMapEnum.香港; Assert.Equal(1, orm.Update <ToStringMap>().SetSource(item).ExecuteAffrows()); find = orm.Select <ToStringMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.香港).First(); Assert.NotNull(find); Assert.Equal(item.id, find.id); Assert.Equal(item.enum_to_string, find.enum_to_string); Assert.Equal(ToStringMapEnum.香港, find.enum_to_string); item.enum_to_string = ToStringMapEnum.中国人; Assert.Equal(1, orm.Update <ToStringMap>().SetSource(item).ExecuteAffrows()); find = orm.Select <ToStringMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.中国人).First(); Assert.NotNull(find); Assert.Equal(item.id, find.id); Assert.Equal(item.enum_to_string, find.enum_to_string); Assert.Equal(ToStringMapEnum.中国人, find.enum_to_string); //update set Assert.Equal(1, orm.Update <ToStringMap>().Where(a => a.id == item.id).Set(a => a.enum_to_string, ToStringMapEnum.香港).ExecuteAffrows()); find = orm.Select <ToStringMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.香港).First(); Assert.NotNull(find); Assert.Equal(item.id, find.id); Assert.Equal(ToStringMapEnum.香港, find.enum_to_string); Assert.Equal(1, orm.Update <ToStringMap>().Where(a => a.id == item.id).Set(a => a.enum_to_string, ToStringMapEnum.abc).ExecuteAffrows()); find = orm.Select <ToStringMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.abc).First(); Assert.NotNull(find); Assert.Equal(item.id, find.id); Assert.Equal(ToStringMapEnum.abc, find.enum_to_string); //delete Assert.Equal(0, orm.Delete <ToStringMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.中国人).ExecuteAffrows()); Assert.Equal(0, orm.Delete <ToStringMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.香港).ExecuteAffrows()); Assert.Equal(1, orm.Delete <ToStringMap>().Where(a => a.id == item.id && a.enum_to_string == ToStringMapEnum.abc).ExecuteAffrows()); Assert.Null(orm.Select <ToStringMap>().Where(a => a.id == item.id).First()); }