在SQL Server中,我有一个表,其列定义为不可为空.
我有一个存储过程做一些连接,以便该字段的结果输出列实际上永远不为null.
在EF5中,我有一个由EF自动生成的输出的复杂类型(当我将存储过程添加到模型时),并且该字段生成为“nullable = false”我猜是因为所有连接中该列的定义表是“非空”.
现在,在我的解决方案中,我使用存储过程查询数据库并执行联合(仅用于显示,没有“保存更改”),其中我联合的表在某些行中对于该列/字段具有NULL;而且我遇到了麻烦,因为我得到一个例外,我的复杂类型不允许null.
到目前为止,我的解决方案是手动将不可空变为可变的复杂类型字段的类型,但每次我从模型更新时,我都会将我的更改还原(当然).
我想有一个更聪明的解决方案,但我看不到它……
任何的想法?
最佳答案 如果你有一个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