您可以使用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.
..加载具有此值的行时为空?
答案 0 :(得分:0)
我试图推荐一位评论者写一个答案。
在自动生成的代码中使用find / replace解决了这个问题。实际上不建议这样做,所有更改都可以替换为只需按ORM工具中的Save(如果它不支持更改)。
在这种情况下,您可以解决它在ORM设计器内部在数据类型之后附加问号的问题。这意味着global::Namespace.ClassName.EnumName
将global::Namespace.ClassName.EnumName?
就像一个可空的int int?
。其他属性当然必须照常使用。
另外值得一提的还原到上面(读取空值);如果数据类型将保存空值,则枚举需要处理NULL。
答案 1 :(得分:0)
如何简单地打开生成的代码并添加'?'到相应的声明?我知道你不得不在不久前做类似的工作,以确保Guid-fields能够获得db生成的值。 (它支持它,但Linq2Sql没有正确添加该参数..)
我完全同意你的观点,我们不建议这样做。但是,如果你没有看到任何其他解决方案而不是更改生成的代码,我强烈建议在某处清楚地记录它,某些地方不在生成的代码中。我没有在上面提到的项目中,几个月后我不得不在数据库中更改一些新版本。当然我没有想到我当时对自动生成的代码所做的更改并重新生成它,导致了相当多的错误,因为我没有完全记住我所做的改变,所以整理得有些麻烦。早些时候..好时光,美好时光! :O)