Subsonic 3 - 将空值传递给存储过程参数
使用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;
想法?
我没有亚音速手头,但也许你可以使用可空int。
int? dummyInt = null;
StoredProcedure sproc = db.Test_SPWithNullParams(dummyInt , "test");
没办法。存储过程仅在不可为空类型的情况下生成。为什么不尝试这样的东西?:
StoredProcedure sproc = db.Test_SPWithNullParams(someNullableInt.HasValue ? someNullableInt.Value: 0, "test");
我明白Subsonic会生成不可为空的函数参数。但是,我的数据模型在某些情况下需要空值。上面的建议发送一个非空值或零,而不是我需要的空值。 – EBarr 2010-02-16 16:37:29
对不起,忘了问..是什么让这是一个“不通”?我的数据模型需要空值。 – EBarr 2010-02-16 16:41:08
您需要修改Subsonic模板StoredProcedures.tt并查看Subsonic内核是否标识过程何时具有null参数。否则,你实际上需要分支Subsonic。 – Apocatastasis 2010-02-16 16:44:05
对不起,但定义可为空dummyInt参数防止编译。 Subsonic写入“db.Test_SPWithNullParams”,不含可为空的参数。这意味着我需要做一个(int.hasvalue?int:0)或定义一个不可为空的参数。既不允许我传递一个空值给我的SP。 – EBarr 2010-02-16 16:40:16