Linq2SQL无法从表字段中读取空值作为ENUM

时间:2011-05-24 09:23:50

标签: c# linq-to-sql

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

我已经删除了一个表格和一个与ENUM之前的关系。 在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. 

..加载具有此值的行时为空?

2 个答案:

答案 0 :(得分:0)

我试图推荐一位评论者写一个答案。

在自动生成的代码中使用find / replace解决了这个问题。实际上不建议这样做,所有更改都可以替换为只需按ORM工具中的Save(如果它不支持更改)。

在这种情况下,您可以解决它在ORM设计器内部在数据类型之后附加问号的问题。这意味着global::Namespace.ClassName.EnumNameglobal::Namespace.ClassName.EnumName?就像一个可空的int int?。其他属性当然必须照常使用。

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

答案 1 :(得分:0)

如何简单地打开生成的代码并添加'?'到相应的声明?我知道你不得不在不久前做类似的工作,以确保Guid-fields能够获得db生成的值。 (它支持它,但Linq2Sql没有正确添加该参数..)

我完全同意你的观点,我们不建议这样做。但是,如果你没有看到任何其他解决方案而不是更改生成的代码,我强烈建议在某处清楚地记录它,某些地方不在生成的代码中。我没有在上面提到的项目中,几个月后我不得不在数据库中更改一些新版本。当然我没有想到我当时对自动生成的代码所做的更改并重新生成它,导致了相当多的错误,因为我没有完全记住我所做的改变,所以整理得有些麻烦。早些时候..好时光,美好时光! :O)