4

在 SQL Server 中,我有一个表,其中的列定义为不可为空。

而且我有一个存储过程进行一些连接,因此该字段的结果输出列实际上永远不会为空。

在 EF5 中,我有一个由 EF 自动生成的输出的复杂类型(当我将存储过程添加到模型中时)并且该字段生成为“nullable = false”我猜是因为该列在所有连接中的定义表是“非空”。

现在,在我的解决方案中,我使用存储过程查询数据库并执行联合(仅用于显示,没有“Savechanges”),其中与我联合的表在某些行中该列/字段为 NULL;我遇到了麻烦,因为我得到一个异常,说我的复杂类型不允许 null 。

到目前为止,我的解决方案是手动将复杂类型字段的类型从不可为空更改为可空,但是每次我从模型更新时,我都会恢复我的更改(当然)。

我想有一个更聪明的解决方案,但我看不到它......

任何想法?

4

1 回答 1

3

如果您有一个 proc 返回一个名为 mycol 的不可为空的列,如下所示

     create PROCEDURE [dbo].[test1] 
         AS
         BEGIN
        SET NOCOUNT ON;
      select col1,col2,col3,mycol from mytable
         END    

您可以简单地将您的 select 语句与一个空结果集联合起来,该结果集包括需要为空的列的空值

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

于 2013-06-11T08:51:51.143 回答