【问题标题】:Linq2SQL can't read a null-value from table-field as ENUMLinq2SQL 无法从表字段中读取空值作为 ENUM
【发布时间】:2011-05-24 09:23:50
【问题描述】:

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

我已经删除了一个表以及与之前 ENUM 的关系。 在 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 的行时?

【问题讨论】:

  • 看来 是一个值类型,如果你想将 Null 分配给它添加“?”声明枚举类型的运算符:类似 EnumDataType? sql-server-field.
  • 谢谢。那将是容易的部分。不过,这是由 Linq2Sql 工具完成的,从数据库中读取空值似乎很困惑..
  • 对Linq2Sql不是很熟悉,但是有没有自动生成的代码?
  • 简单地打开生成的代码并添加“?”怎么样?到相应的声明?我知道您前段时间必须做类似的事情以确保 Guid-fields 将获得 db 生成的值。 (它支持它,但 Linq2Sql 没有正确添加该参数..)
  • @Robin 这似乎是正确的答案。我永远不会建议打开生成的代码,但事实就是如此。我很确定(并且会在这种情况下加倍检查)它足够添加吗?在 global:: 定义中。这意味着“global::Namespace.Class?”。

标签: c# linq-to-sql


【解决方案1】:

简单地打开生成的代码并添加“?”怎么样?到相应的声明?我知道您前段时间必须做类似的事情,以确保 Guid-fields 能够获得 db 生成的值。 (它支持它,但 Linq2Sql 没有正确添加该参数..)

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

【讨论】:

    【解决方案2】:

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

    通过在自动生成的代码中查找/替换解决了这个问题。确实不建议这样做,只要在 ORM 工具中按 Save 即可替换所有更改(如果它不支持更改)。

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

    还值得一提的是revert to above(读取一个空值);如果数据类型会保存空值,则枚举需要处理空值。

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2017-01-12
      • 2022-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多