2016-07-28 10 views
0

私は既存のデータベースを操作しようとしていますが、変更を加える能力はありません。私はいくつかの過渡的な仕事をしたいと思いますが、ORMになっています。私は問題にぶつかりました。エンティティフレームワークnullまたは0との関連

私はEF Fluent API(NHibernateのやり方に近い)を使用しており、NULL値の列ParentIdがデータベースにあります。私はこのためにHasOptional関係を作成して、それが動作します:

HasOptional(x => x.Parent).WithMany().Map(m => m.MapKey("ParentId")); 

この特定の列には、(彼らは外部キーを使用していない)、この欄に0年代の多くを持っているようだと私は追加することができない場合がありますFK制約は私の他のアプリケーションを壊してしまいます(私はFKマッチのないすべてのものを変更したり削除したりする必要があります)。 EFはこれを十分に処理し、id 0の一致する親を持たないレコードに対してはEFはnullを返します。私はこのようなLINQクエリを使用しようとする場合、これはしかし、転倒:

myitems.Where(i => Parent != null) 

Parent != nullすべてを選択します。これは、0ParentIdを持つレコードを返すようもちろんのSQLクエリのこのタイプ

WHERE ParentId = null 

これは望ましい結果を得ることはありません変換します。このSQLクエリに基づいてオブジェクトを検査すると、正しく親を持ち、親がnullである多くの結果が得られます。

EFでクエリのこの列をNULLIF(0)のように変換する方法はありますか?もしそうでなければ、私はこれを回避するためのアイデアが必要です。データベースに変更を加えることなくEFを使うことができます。

私はすでに計算列を考慮していますが、それはクエリに役立ちます。私がエンティティを永続化しようとすると、それは落ちるでしょう。これは、それを回避ん

myitems.Where(i => i.Parent != null && i.Parent.Id != 0) 

が、それは私のクエリはいつものアカウントにこの問題をする必要がある場合、どういう意味:私はちょうど実現した

答えて

0

回避策の一つは、このような何かに私のクエリを変更することです私はこのすべてがマッピングによってシームレスに処理できることを期待していました。それよりも良い答えを望んでいます。

関連する問題