Ejemplo n.º 1
0
        public static int DyUpdate <TEntity>(this IDbSession dbSession, object entity, bool?enablePropertyChangedTrack)
        {
            var entityProxy = entity as IEntityPropertyChangedTrackProxy;

            if (!enablePropertyChangedTrack.HasValue)
            {
                enablePropertyChangedTrack = entityProxy != null;
            }

            if (enablePropertyChangedTrack == true)
            {
                enablePropertyChangedTrack = entityProxy != null;
            }

            var dyParams   = RequestConvert.Instance.ToSqlParameters(entity, false);
            var tableName  = EntityMetaDataCache <TEntity> .TableName;
            var pkCol      = EntityMetaDataCache <TEntity> .PrimaryKey;
            var sqlBuilder = new StringBuilder();

            sqlBuilder.AppendFormat("Update {0} Set ", tableName);
            var isFirst = true;

            foreach (var paramKV in dyParams)
            {
                if (!EntityMetaDataCache <TEntity> .TryGetColumnByPropertyName(paramKV.Key, out var column))
                {
                    continue;
                }

                if (column.IsPrimaryKey)
                {
                    continue;
                }

                if (enablePropertyChangedTrack.Value && entityProxy.GetPropertyVersion(column.Property.Name) == 0)
                {
                    continue;
                }

                if (!isFirst)
                {
                    sqlBuilder.Append(",");
                }

                isFirst = false;
                AppendColumnEqParameter(sqlBuilder, dbSession.SmartSqlConfig.Database.DbProvider, column);
            }

            sqlBuilder.Append(" Where ");
            AppendColumnEqParameter(sqlBuilder, dbSession.SmartSqlConfig.Database.DbProvider, pkCol);
            return(dbSession.Execute(new RequestContext
            {
                RealSql = sqlBuilder.ToString(),
                Request = dyParams
            }));
        }
Ejemplo n.º 2
0
        private static StringBuilder BuildInsertSql <TEntity>(DbProvider dbProvider, SqlParameterCollection dyParams)
        {
            var tableName     = EntityMetaDataCache <TEntity> .TableName;
            var isFirst       = true;
            var columnBuilder = new StringBuilder();
            var paramBuilder  = new StringBuilder();

            foreach (var paramKV in dyParams)
            {
                if (!EntityMetaDataCache <TEntity> .TryGetColumnByPropertyName(paramKV.Key, out var column))
                {
                    continue;
                }

                if (column.IsAutoIncrement)
                {
                    continue;
                }

                if (!isFirst)
                {
                    columnBuilder.Append(",");
                    paramBuilder.Append(",");
                }

                isFirst = false;
                AppendColumnName(columnBuilder, dbProvider, column.Name);
                AppendParameterName(paramBuilder, dbProvider, column.Name);
            }

            var sqlBuilder = new StringBuilder();

            sqlBuilder.AppendFormat("Insert Into {0} ({1}) Values ({2})", tableName, columnBuilder.ToString(),
                                    paramBuilder.ToString());
            return(sqlBuilder);
        }