@@ -232,6 +232,30 @@ let ResultSetAndOutParam() =
232232 Assert.Equal<_ list>([ Some " donkey" ], [ for x in result -> x.myName ] )
233233 Assert.Equal( 2 L, ! total)
234234
235+ // Fix #340:
236+ // The type provider cannot use Expr.Value(Activator.CreateInstance(t),t) for
237+ // non primitive types, like System.Guid.
238+ // It now use Expr.DefaultValue(t) for non primite types.
239+ // The PassGuid SP copies the input guid to the output parameter when the boolean
240+ // parameter is true, and let the out parameter uninitialized when false
241+ [<Fact>]
242+ let NonPrimitiveOutParam () =
243+ let guid = Guid.NewGuid()
244+ let cmd = new AdventureWorks.dbo.PassGuid()
245+ let _ , result = cmd.Execute( guid, true )
246+ Assert.Equal( guid, result)
247+
248+ // Fix #340:
249+ // When an output parameter has not been set, its value is DBNull which cannot
250+ // be unboxed. The fix sets the parameter to defaultOf<'t>.
251+ // The PassGuid SP copies the input guid to the output parameter when the boolean
252+ // parameter is true, and let the out parameter uninitialized when false
253+ [<Fact>]
254+ let NonPrimitiveNullOutParam () =
255+ let guid = Guid.NewGuid()
256+ let cmd = new AdventureWorks.dbo.PassGuid()
257+ let _ , result = cmd.Execute( guid, false )
258+ Assert.Equal( Guid.Empty, result)
235259
236260[<Fact>]
237261let PassingImageAsParamDoesntGetCut () =
0 commit comments