Linq2SQL 不能从表字段中读取空值作为 ENUM

本文关键字:空值 ENUM 读取 不能 字段 Linq2SQL | 更新日期: 2023-09-27 17:57:25

您可以使用global::Namespace将ENUM数据类型附加到Linq2SQL中的sqlserver-table-field,并指定其服务器数据类型。

我已经删除了一个表和一个与之前枚举的关系。在 Linq2Sql DataContext 中,类型设置为 global::Namespace, NULLable=True 及其对应的服务器数据类型 (small int)。

为什么我得到

InvalidOperationException
The null value cannot be assigned to a member with type 
<Namespace> which is a non-nullable value type. 

..加载此值为 null 的行时?

Linq2SQL 不能从表字段中读取空值作为 ENUM

简单地打开生成的代码并将"?"添加到相应的声明中怎么样?我知道你前段时间必须做类似的事情来确保 Guid 字段会得到 db 生成的值。(它支持它,但 Linq2Sql 没有正确添加该参数。

我完全同意你的看法,根本不建议这样做。但是,如果您除了更改生成的代码之外没有其他解决方案,我强烈建议您在某处清楚地记录它,而不是在生成的代码中的某个地方。我没有参加我上面提到的项目,几个月后我不得不在数据库中更改某些内容以获得新版本。当然,我当时没有考虑我对自动生成的代码的更改并重新生成它,导致相当多的错误,这有点混乱,因为我不完全记得我之前更改了什么。好时光,好时光!:o)

我试图促进评论者写一个答案。

这个问题是通过自动生成的代码中的查找/替换来解决的。这真的不建议,一旦您在ORM工具中按保存(如果不支持更改),就可以替换所有更改。

在这种情况下,您可以在ORM设计器中通过在数据类型后附加一个问号来解决它。这意味着global::Namespace.ClassName.EnumName将像可空的整数int?一样global::Namespace.ClassName.EnumName?。其他属性当然必须像往常一样适合。

还值得一提的是恢复到上面(读取空值);如果数据类型将保存空值,则枚举需要处理 NULL。