この非常に奇妙なシナリオを見つけただけで、問題が何であるか知っている人がいるかどうかは不思議でした。私は以下のEF Linqクエリを持っています。質問とは異なる値を返しているEF
var hierarchies = (from hierarchy in ctx.PolygonHierarchyViews
where hierarchy.DashboardId == dashboardId
select hierarchy);
私は、デバッガでそのクエリを検査するとき、私はSQL Server Management StudioでdashboardId
の値で@p__linq__0
をsubstitudingことを実行した場合、それは、次のSQL
SELECT
[Extent1].[DashboardId] AS [DashboardId],
[Extent1].[CurrentId] AS [CurrentId],
[Extent1].[PolygonTypeId] AS [PolygonTypeId],
[Extent1].[DisplayName] AS [DisplayName],
[Extent1].[ParentId] AS [ParentId]
FROM [dbo].[PolygonHierarchyView] AS [Extent1]
WHERE [Extent1].[DashboardId] = @p__linq__0
を示しています。私はこれらの結果を得る。
DashboardId CurrentId Type Name ParentId
4 5 1 Region NULL
4 6 2 Market NULL
4 7 3 SubMarket 6
4 8 4 ZipCode 7
4 6 2 Market 5
4 7 3 SubMarket 6
4 8 4 ZipCode 7
ただし、EFクエリを反復した結果は次のとおりです。 5行目は、これは私が問題を回避働いていた方法ですParentId
NULL
の代わりに5を持っている
DashboardId CurrentId Type Name ParentId
4 5 1 Region NULL
4 6 2 Market NULL
4 7 3 SubMarket 6
4 8 4 ZipCode 7
4 6 2 Market NULL
4 7 3 SubMarket 6
4 8 4 ZipCode 7
ていることに注意してください。
var hierarchies = (from hierarchy in ctx.PolygonHierarchyViews
where hierarchy.DashboardId == dashboardId
group hierarchy by hierarchy.ParentId into grp
select grp).AsEnumerable();
ここで奇妙なことは、これが5のKey
値とIGrouping
をもたらすことがあるが、そのグループ内の単一のオブジェクトのParentId
はnull
あります。
私はそのクエリからlookup
をクリートしようとするとちょうど
var lookup = hierarchies.ToLookup(h => h.ParentId);
を行うにはしかし、実際にParentId
ので、常に正しい値を持っているようだと私はしてグループを行う必要はありませんたかりましたよ私はSelectMany
とToLookup
を行う前に、クエリの端からAsEnumerable
を削除した場合、問題も見知らぬ人にするには、以下の
var lookup = hierarchies.SelectMany(x => x.Select(y => new { x.Key, View = y }))
.ToLookup(h => h.Key, h => h.View);
を行うために終わりますそれでもParentId
の5をnull
にグループ化する必要があるエンティティが生成されます。
これはEFのバグですか?ここで何か不足していますか?私はEF 6.1.3を使用しています。
parentidとは何ですか?それはダッシュボードですか?すなわち、行の親ですか? dashboardrow id = 5は存在しますか? – Thorarins
@Thorarins 'ParentId'は' CurrentId'へのリンクです。だから3行目は2列目の子です。そして5番目の行は最上位の親ではなく、最初の行の子でなければなりません。 – juharr
これは、ビュー内で一意でない主キー(EFが知っている)が原因であると確信しています。 –