c# – 在实体框架中,当列被定义为不可为空时,如何使存储过程返回可为空?

在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

点赞