@@ -39,6 +39,11 @@ namespace Z.EntityFramework.Plus
3939 /// <summary>Class to batch delete.</summary>
4040 public class BatchUpdate
4141 {
42+ public class NullValue
43+ {
44+ public Type Type ;
45+ }
46+
4247 /// <summary>The command text template.</summary>
4348 internal const string CommandTextTemplate = @"
4449UPDATE A {Hint}
@@ -380,7 +385,9 @@ internal DbCommand CreateCommand<T>(ObjectQuery query, SchemaEntityType<T> entit
380385
381386 if ( isMySql )
382387 {
383- tableName = string . Concat ( "`" , store . Table , "`" ) ;
388+ tableName = string . IsNullOrEmpty ( store . Schema ) || store . Schema == "dbo" ?
389+ string . Concat ( "`" , store . Table , "`" ) :
390+ string . Concat ( "`" , store . Schema , "." , store . Table , "`" ) ;
384391 }
385392 else if ( isSqlCe )
386393 {
@@ -533,12 +540,28 @@ internal DbCommand CreateCommand<T>(ObjectQuery query, SchemaEntityType<T> entit
533540
534541 var parameter = command.CreateParameter();
535542 parameter.ParameterName = parameterPrefix + " zzz_BatchUpdate_ " + i;
536- parameter. Value = values[ i] . Item2 ?? DBNull. Value;
543+
544+ var paramValue = values[ i] . Item2;
545+ var paramNullValue = paramValue as NullValue;
546+ if ( paramNullValue != null )
547+ {
548+ parameter . Value = DBNull . Value ;
549+ }
550+ else
551+ {
552+ parameter . Value = paramValue ?? DBNull . Value ;
553+ }
554+
537555
538556 if ( parameter is SqlParameter)
539557 {
540558 var sqlParameter = ( SqlParameter ) parameter;
541- if ( sqlParameter . DbType == DbType . DateTime )
559+
560+ if ( paramNullValue != null && paramNullValue . Type == typeof ( byte [ ] ) )
561+ {
562+ sqlParameter . SqlDbType = SqlDbType . VarBinary ;
563+ }
564+ else if ( sqlParameter . DbType == DbType . DateTime )
542565 {
543566 sqlParameter. DbType = DbType . DateTime2 ;
544567 }
@@ -816,7 +839,18 @@ public DbCommand CreateCommand(IQueryable query, IEntityType entity, List<Tuple<
816839
817840 var parameter = command . CreateParameter ( ) ;
818841 parameter . ParameterName = "@zzz_BatchUpdate_ " + i;
819- parameter. Value = values[ i] . Item2 ?? DBNull. Value;
842+
843+ var paramValue = values[ i] . Item2;
844+ var paramNullValue = paramValue as NullValue;
845+ if ( paramNullValue != null )
846+ {
847+ parameter . Value = DBNull . Value ;
848+ }
849+ else
850+ {
851+ parameter . Value = paramValue ?? DBNull . Value ;
852+ }
853+
820854 command . Parameters . Add ( parameter ) ;
821855 }
822856
@@ -1101,6 +1135,11 @@ public Dictionary<string, object> ResolveUpdateFromQueryDictValues<T>(Expression
11011135 {
11021136 var dictValues = new Dictionary < string , object > ( ) ;
11031137 var updateExpressionBody = updateFactory. Body;
1138+
1139+ while ( updateExpressionBody . NodeType = = ExpressionType . Convert || updateExpressionBody . NodeType == ExpressionType . ConvertChecked )
1140+ {
1141+ updateExpressionBody = ( ( UnaryExpression ) updateExpressionBody ) . Operand ;
1142+ }
11041143 var entityType = typeof ( T ) ;
11051144
11061145 // ENSURE: new T() { MemberInitExpression }
@@ -1142,7 +1181,15 @@ public Dictionary<string, object> ResolveUpdateFromQueryDictValues<T>(Expression
11421181
11431182 if ( constantExpression != null )
11441183 {
1145- value = constantExpression. Value ;
1184+ if ( constantExpression . Value == null )
1185+ {
1186+ value = new NullValue( ) { Type = constantExpression. Type } ;
1187+ }
1188+ else
1189+ {
1190+ value = constantExpression . Value ;
1191+ }
1192+
11461193 }
11471194 else
11481195 {
0 commit comments