Exemple #1
0
 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);
                 }
             }
         }
     }
 }
Exemple #2
0
 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()));
         }
     }
 }
Exemple #3
0
        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());
        }
Exemple #4
0
        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());
        }
Exemple #5
0
        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());
        }
Exemple #6
0
        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());
        }