@@ -812,6 +812,148 @@ void AssertDbStringParamSizes(IDbCommand cmd)
812812 Assert . That ( row . FirstName , Is . EqualTo ( "Updated" ) ) ;
813813 }
814814 }
815+
816+ [ Test ]
817+ public void Can_update_DefaultValue ( )
818+ {
819+ using var db = OpenDbConnection ( ) ;
820+ db . DropAndCreateTable < DefaultValue > ( ) ;
821+ AssertDefaultValueFieldTypeDefaultValues ( ) ;
822+
823+ var orig = new DefaultValue {
824+ Id = 1 ,
825+ Bool = true ,
826+ NBool = false ,
827+ Int = 2 ,
828+ NInt = 0 ,
829+ String = "A" ,
830+ } ;
831+ db . Insert ( orig ) ;
832+ var row = db . SingleById < DefaultValue > ( 1 ) ;
833+ AssertDefaultValues ( row , orig ) ;
834+
835+ db . UpdateOnly < DefaultValue > ( new Dictionary < string , object > {
836+ [ nameof ( DefaultValue . Id ) ] = 1 ,
837+ [ nameof ( DefaultValue . Bool ) ] = false ,
838+ [ nameof ( DefaultValue . NBool ) ] = null ,
839+ [ nameof ( DefaultValue . Int ) ] = 0 ,
840+ [ nameof ( DefaultValue . NInt ) ] = null ,
841+ [ nameof ( DefaultValue . String ) ] = null ,
842+ } ) ;
843+
844+ row = db . SingleById < DefaultValue > ( 1 ) ;
845+ AssertDefaultValues ( row , new DefaultValue {
846+ Id = 1 ,
847+ Bool = false ,
848+ NBool = null ,
849+ Int = 0 ,
850+ NInt = null ,
851+ String = null ,
852+ } ) ;
853+
854+ db . UpdateOnly < DefaultValue > ( new Dictionary < string , object > {
855+ [ nameof ( DefaultValue . Id ) ] = 1 ,
856+ [ nameof ( DefaultValue . Bool ) ] = true ,
857+ [ nameof ( DefaultValue . NBool ) ] = false ,
858+ [ nameof ( DefaultValue . Int ) ] = 1 ,
859+ [ nameof ( DefaultValue . NInt ) ] = 0 ,
860+ [ nameof ( DefaultValue . String ) ] = "" ,
861+ } ) ;
862+
863+ row = db . SingleById < DefaultValue > ( 1 ) ;
864+ AssertDefaultValues ( row , new DefaultValue {
865+ Id = 1 ,
866+ Bool = true ,
867+ NBool = false ,
868+ Int = 1 ,
869+ NInt = 0 ,
870+ String = "" ,
871+ } ) ;
872+ }
873+
874+ [ Test ]
875+ public async Task Can_update_DefaultValue_Async ( )
876+ {
877+ using var db = OpenDbConnection ( ) ;
878+ db . DropAndCreateTable < DefaultValue > ( ) ;
879+ AssertDefaultValueFieldTypeDefaultValues ( ) ;
880+
881+ var orig = new DefaultValue {
882+ Id = 1 ,
883+ Bool = true ,
884+ NBool = false ,
885+ Int = 2 ,
886+ NInt = 0 ,
887+ String = "A" ,
888+ } ;
889+ await db . InsertAsync ( orig ) ;
890+ var row = await db . SingleByIdAsync < DefaultValue > ( 1 ) ;
891+ AssertDefaultValues ( row , orig ) ;
892+
893+ db . UpdateOnly < DefaultValue > ( new Dictionary < string , object > {
894+ [ nameof ( DefaultValue . Id ) ] = 1 ,
895+ [ nameof ( DefaultValue . Bool ) ] = false ,
896+ [ nameof ( DefaultValue . NBool ) ] = null ,
897+ [ nameof ( DefaultValue . Int ) ] = 0 ,
898+ [ nameof ( DefaultValue . NInt ) ] = null ,
899+ [ nameof ( DefaultValue . String ) ] = null ,
900+ } ) ;
901+
902+ row = await db . SingleByIdAsync < DefaultValue > ( 1 ) ;
903+ AssertDefaultValues ( row , new DefaultValue {
904+ Id = 1 ,
905+ Bool = false ,
906+ NBool = null ,
907+ Int = 0 ,
908+ NInt = null ,
909+ String = null ,
910+ } ) ;
911+
912+ await db . UpdateOnlyAsync < DefaultValue > ( new Dictionary < string , object > {
913+ [ nameof ( DefaultValue . Id ) ] = 1 ,
914+ [ nameof ( DefaultValue . Bool ) ] = true ,
915+ [ nameof ( DefaultValue . NBool ) ] = false ,
916+ [ nameof ( DefaultValue . Int ) ] = 1 ,
917+ [ nameof ( DefaultValue . NInt ) ] = 0 ,
918+ [ nameof ( DefaultValue . String ) ] = "" ,
919+ } ) ;
920+
921+ row = db . SingleById < DefaultValue > ( 1 ) ;
922+ AssertDefaultValues ( row , new DefaultValue {
923+ Id = 1 ,
924+ Bool = true ,
925+ NBool = false ,
926+ Int = 1 ,
927+ NInt = 0 ,
928+ String = "" ,
929+ } ) ;
930+ }
931+
932+ private static void AssertDefaultValueFieldTypeDefaultValues ( )
933+ {
934+ var modelDef = typeof ( DefaultValue ) . GetModelMetadata ( ) ;
935+ Assert . That ( modelDef . GetFieldDefinition ( nameof ( DefaultValue . Int ) ) . FieldTypeDefaultValue ,
936+ Is . EqualTo ( default ( int ) ) ) ;
937+ Assert . That ( modelDef . GetFieldDefinition ( nameof ( DefaultValue . NInt ) ) . FieldTypeDefaultValue ,
938+ Is . EqualTo ( default ( int ? ) ) ) ;
939+ Assert . That ( modelDef . GetFieldDefinition ( nameof ( DefaultValue . Bool ) ) . FieldTypeDefaultValue ,
940+ Is . EqualTo ( default ( bool ) ) ) ;
941+ Assert . That ( modelDef . GetFieldDefinition ( nameof ( DefaultValue . NBool ) ) . FieldTypeDefaultValue ,
942+ Is . EqualTo ( default ( bool ? ) ) ) ;
943+ Assert . That ( modelDef . GetFieldDefinition ( nameof ( DefaultValue . String ) ) . FieldTypeDefaultValue ,
944+ Is . EqualTo ( default ( string ) ) ) ;
945+ }
946+
947+ private void AssertDefaultValues ( DefaultValue row , DefaultValue orig )
948+ {
949+ Assert . That ( row . Id , Is . EqualTo ( orig . Id ) ) ;
950+ Assert . That ( row . Bool , Is . EqualTo ( orig . Bool ) ) ;
951+ Assert . That ( row . NBool , Is . EqualTo ( orig . NBool ) ) ;
952+ Assert . That ( row . Int , Is . EqualTo ( orig . Int ) ) ;
953+ Assert . That ( row . NInt , Is . EqualTo ( orig . NInt ) ) ;
954+ Assert . That ( row . String , Is . EqualTo ( orig . String ) ) ;
955+ }
956+
815957 }
816958
817959 [ CompositeIndex ( "FirstName" , "LastName" ) ]
@@ -830,4 +972,15 @@ public class Shutdown
830972 public int Id { get ; set ; }
831973 public bool ? IsShutdownGraceful { get ; set ; }
832974 }
975+
976+ public class DefaultValue
977+ {
978+ public int Id { get ; set ; }
979+ public int Int { get ; set ; }
980+ public int ? NInt { get ; set ; }
981+ public bool Bool { get ; set ; }
982+ public bool ? NBool { get ; set ; }
983+ public string String { get ; set ; }
984+ }
985+
833986}
0 commit comments