2016-08-29 3 views
2

タイトルのとおり データベースにジオメトリがなく、DbGeometryがnull値を取得したときにDbNull型をnull値で受け取るコードがあります。しかし、DbGeometryがDbNull.Valueに等しいかどうかをチェックするためにif文を作成したいとき、私はそれを行うことができません。 それはこのようなものです:例外がthrowされても、DbNullのDbGeometryとDbNullを比較することはできません。

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; 

をそれだけで正常に動作します。 DbNullを処理しなくてもDbNull.ValueとDbGeometry型であるgeom変数を比較しようとするとエラーが発生するのはなぜですか?

答えて

1

はDBNullは存在しない値、およびVT_EMPTYバリアントを示しVT_NULL変異体、区別するためにCOM相互運用機能によって使用されます。

オブジェクト指向プログラミング言語でnullという概念をDBNullオブジェクトと混同しないでください。オブジェクト指向プログラミング言語では、nullはオブジェクトへの参照がないことを意味します。 DBNullは、の未初期化バリアントまたは存在しないデータベース列を表します。

"備考 DBNullクラスは、存在しない値を表します。たとえば、データベースのテーブルの行の列には、データがまったく含まれていない可能性があります。さらに、COM相互運用機能はDBNullクラスを使用して、存在しない値を示すVT_NULLバリアントと不特定の値を示すVT_EMPTYバリアントを区別します。 EFでは

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

あなたは単にNULL可能プロパティを定義し、参照型を持っているならば、ただのNullable関連IDとを設定し、がDBNullを使用する必要はありません!

詳細:

What is the point of DBNull?

関連する問題