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 })); }
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); }