C# Linq2SQL可以';无法从表字段中读取空值作为枚举

C# Linq2SQL可以';无法从表字段中读取空值作为枚举,c#,linq-to-sql,C#,Linq To Sql,可以使用global::Namespace将枚举数据类型附加到Linq2SQL中的sqlserver表字段,并指定其服务器数据类型 我已经删除了一个表以及与前面的枚举的关系。 在Linq2Sql DataContext中,该类型设置为global::Namespace,NULLable=True及其对应的服务器数据类型(小int) 为什么我会受伤 InvalidOperationException The null value cannot be assigned to a member wit

可以使用global::Namespace将枚举数据类型附加到Linq2SQL中的sqlserver表字段,并指定其服务器数据类型

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

为什么我会受伤

InvalidOperationException
The null value cannot be assigned to a member with type 
<Namespace> which is a non-nullable value type. 
无效操作异常
无法将空值分配给类型为的成员
这是一种不可为空的值类型。

…加载此值为null的行时?

我试图让评论员编写答案

这个问题通过在自动生成的代码中查找/替换得到解决。这是不推荐的,只要在ORM工具中按Save(如果不支持更改),所有更改都可以被替换

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


同样值得一提的是,返回到上面(读取空值);如果数据类型将保存null值,则枚举需要处理null

打开生成的代码并将“?”添加到相应的声明中怎么样?我知道不久前您必须执行类似的操作,以确保Guid字段将获得db生成的值。(它支持该参数,但Linq2Sql没有正确添加该参数..)


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

这似乎是一种值类型,如果要为其赋值Null,请在声明枚举类型时添加“?”运算符:类似于EnumDataType?sql server字段。谢谢。这将是最简单的部分。不过,这是由Linq2Sql工具完成的,从数据库中读取空值似乎有点混淆..不太熟悉Linq2Sql,但有自动生成的代码吗?只需打开生成的代码并将“?”添加到相应的声明中如何?我知道不久前您必须执行类似的操作,以确保Guid字段将获得db生成的值。(它支持它,但Linq2Sql没有正确添加该参数。)@Robin这似乎是正确的答案。我从不建议打开生成的代码,但事实就是这样。我很确定(并将在本案结束后再次检查)是否足够?在全局::定义。这意味着“global::Namespace.Class?”。