在SQL server中,我有一个表,其列定义为不可为空。
我有一个存储过程做一些连接,以便该字段的结果输出列实际上永远不为null。
在EF5中,我有一个由EF自动生成的输出的复杂类型(当我将存储过程添加到模型时),并且该字段生成为“nullable = false”我猜是因为该列的定义所有连接的表都是“NOT NULL”。
现在,在我的解决方案中,我使用存储过程查询数据库并执行联合(仅用于显示,没有“保存更改”),其中我联合的表在某些行中对于该列/字段具有NULL;而且我遇到了麻烦,因为我得到一个例外,我的复杂类型不允许使用null。
到目前为止,我的解决方案是手动将不可空变为可变的复杂类型字段的类型,但每次我从模型更新时,我的变更都会被恢复(当然)。
我想有一个更聪明的解决方案,但我看不到它......
有什么想法吗?
答案 0 :(得分:3)
如果你有一个proc,它返回一个名为mycol的非可空列,如下所示
create PROCEDURE [dbo].[test1]
AS
BEGIN
SET NOCOUNT ON;
select col1,col2,col3,mycol from mytable
END
你可以简单地将你的select语句与一个空结果集联合起来,该结果集包含一个需要为空的列的null
create PROCEDURE [dbo].[test2]
AS
BEGIN
SET NOCOUNT ON;
select col1,col2,col3,mycol from mytable
union
select col1,col2,col3,null from mytable where 1=2
END
EF使用mycol输入test1为nullable = false,并使用mycol导入test2为nullable = true
答案 1 :(得分:0)
您可以创建复杂类型,然后修改生成的字段的Nullable属性。 如果您不想更改sp,则可能很有用。
一步一步:
或者,您可以将edmx作为xml打开并找到相同的属性。
<ComplexType Name="...">
<Property Type="Int32" Name="..." Nullable="true" />
ps:我在VS2012,EF 5中进行了测试