即使异常抛出DbNull作为类型,也无法将DbGeometry与null值比较为DbNull

时间:2016-08-29 10:40:34

标签: c# entity-framework exception dbnull

如标题所示, 我有一个代码,当我在数据库中没有几何体并且DbGeometry获得空值时,我接收具有空值的DbNull类型。但是当我想制作一个if语句来检查DbGeometry是否等于DbNull.Value时,我无法做到这一点。 它是这样的:

var geom = entity.Select(entity => entity.Geom);
if (geom == DbNull.Value) return null; // Here it is not valid for VisualStudio

但是当我做那样的事情时:

if (geom == null) return null;

它运作得很好。为什么当我尝试将DbGeometry类型的geom变量与DbNull.Value进行比较时出现错误,即使没有处理null也会得到DbNull类型。

1 个答案:

答案 0 :(得分:1)

COM interop使用DBNull来区分 VT_NULL 变量(表示不存在的值)和 VT_EMPTY 变体。

不要将面向对象编程语言中的null概念与DBNull对象混淆。在面向对象的编程语言中,null表示缺少对对象的引用。 DBNull 表示 未初始化的变体或不存在的数据库列

“备注 DBNull类表示不存在的值。例如,在数据库中,表行中的列可能不包含任何数据。也就是说,该列被认为根本不存在而不仅仅是没有值。 DBNull对象表示不存在的列。此外,COM interop使用DBNull类来区分VT_NULL变量(表示不存在的值)和VT_EMPTY变量(表示未指定的值)。“

https://msdn.microsoft.com/en-us/library/system.dbnull(v=vs.110).aspx

在EF中,您不必使用DBNull,只需定义nullable属性,如果您有引用类型,则只需将相关Id设置为可为空即可!

更多信息:

What is the point of DBNull?