2010-02-11 158 views
0

使用Subsonic 3.0.0.3将空值传递给存储过程参数是否可行?如果是这样,什么是适当的方式?Subsonic 3 - 将空值传递给存储过程参数

详细
都说我是个SP,其中的一个参数有一个像一个默认值:

CREATE Procedure Test_SPWithNullParams(@p1 int=null, @p2 varchar(50)) 
    AS 
    SELECT 1 as Stuff 

然后在我的代码我做这样的事情:

var db = new Sandbox.DB(); 
StoredProcedure sproc = db.Test_SPWithNullParams(null , "test"); 
//alternately --> db.Test_SPWithNullParams("test"); 

在StoredProcedures.cs中生成的相应函数的方式,但@ p1的参数不可为空。那么我的替代品是什么?我遇到了这篇文章(http://brianmrush.wordpress.com/2010/01/19/subsonic-t4-templates-stored-procedures-nullable-parameters),但它似乎是一个繁琐的工作,有效地分支代码库。

另外我想过手动覆盖命令对象。例如:

int dummyInt = -1; 
StoredProcedure sproc = db.Test_SPWithNullParams(dummyInt , "test"); 
sproc.Command.Parameters[0].ParameterValue = DBNull.Value; 

想法?

回答

0

我没有亚音速手头,但也许你可以使用可空int。

int? dummyInt = null; 
StoredProcedure sproc = db.Test_SPWithNullParams(dummyInt , "test"); 
+0

对不起,但定义可为空dummyInt参数防止编译。 Subsonic写入“db.Test_SPWithNullParams”,不含可为空的参数。这意味着我需要做一个(int.hasvalue?int:0)或定义一个不可为空的参数。既不允许我传递一个空值给我的SP。 – EBarr 2010-02-16 16:40:16

0

没办法。存储过程仅在不可为空类型的情况下生成。为什么不尝试这样的东西?:

StoredProcedure sproc = db.Test_SPWithNullParams(someNullableInt.HasValue ? someNullableInt.Value: 0, "test"); 
+0

我明白Subsonic会生成不可为空的函数参数。但是,我的数据模型在某些情况下需要空值。上面的建议发送一个非空值或零,而不是我需要的空值。 – EBarr 2010-02-16 16:37:29

+0

对不起,忘了问..是什么让这是一个“不通”?我的数据模型需要空值。 – EBarr 2010-02-16 16:41:08

+0

您需要修改Subsonic模板StoredProcedures.tt并查看Subsonic内核是否标识过程何时具有null参数。否则,你实际上需要分支Subsonic。 – Apocatastasis 2010-02-16 16:44:05

相关问题