2010-05-27 82 views
2

我有一个声明了一个输入参数什么会导致linq to sql认为参数是可空的?

@BatchNumber uniqueidentifier 

该字段在表中设置为不允许nullables存储过程。

当我在存储过程中拖动,它将所有东西都钩住它说参数是可空的。

我不明白为什么。这是正常的,它认为参数是可空的?

+0

Duplicate:http://stackoverflow.com/questions/1183460/prevent-nullable-parameter-in-stored-procedure-with-linq – 2010-05-27 21:06:18

+1

因此,一个SQL类型可以始终为空?我不喜欢那些人接受了答案,因为你不应该改变自动生成的代码中的东西,就好像它被重新创建然后被覆盖一样。 – chobo2 2010-05-27 21:09:00

+0

@ chobo2 - 不用在生成的代码中更改它,您可以通过手动编辑它在.dbml文件中对其进行更改。 – 2010-05-27 21:11:53

回答

1

Sql中的所有变量都是可以为空的。没有办法在sql中创建一个不可为空的变量。

--yup, it's nullable. even starts initialized to null. 
DECLARE @MyVar int 

如果在设计器中更改参数类型,应该没问题。

映射代码可以具有非空值并将其交给数据库,并且数据库将其称为可以为空并且没有问题。这发生在您的查询中每个不可为空的情况下(例如Where子句中的不可为空的整数ID)。

如果您无法在设计器中根据需要设置类型,请执行以下操作。为该方法生成代码,并将其从designer.cs文件复制到新的部分类定义中。手动设置方法的属性中的类型。从设计器中删除存储的proc(此时,存储的proc是手动添加的)。我们必须使用这种修复方式来允许OUTPUT参数起作用。

+0

啊,所以用它覆盖这个可空类型来创建一个分类。这种方式即使DBML被重新创建也不会影响它。 – chobo2 2010-05-28 18:39:15

相关问题