gpt4 book ai didi

c# - 在 Entity Framework 中,当列定义为不可为空时,如何让存储过程返回可为空?

转载 作者:行者123 更新时间:2023-11-30 12:10:57 27 4
gpt4 key购买 nike

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

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

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

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

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

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

有什么想法吗?

最佳答案

如果您有一个 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 为 nullable = false 导入 test1,并以 mycol 为 nullable = true 导入 test2

关于c# - 在 Entity Framework 中,当列定义为不可为空时,如何让存储过程返回可为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16812129/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com