2

私はEntityFramework4.3.1を使用していて、このようなクエリを実行しようとしています

Context.Set<KullaniciYetkiView>().Where(y => y.KullaniciId == kullaniciId && y.YetkiKod == yetkiKod)

クエリを実行すると、期待どおりに115レコードが返されます。しかし、私がレコードを見ると、それらはすべて同じです。だから私はプロファイラーからのクエリを聞いて、何が欠けているのかを調べます。以下のクエリと、ManagementStudioからの115の異なるレコードが返されます。

exec sp_executesql N'SELECT 
[Extent1].[YetkiKod] AS [YetkiKod], 
[Extent1].[KullaniciId] AS [KullaniciId], 
[Extent1].[LokasyonId] AS [LokasyonId], 
[Extent1].[YetkiId] AS [YetkiId], 
[Extent1].[HiyerarsikKod] AS [HiyerarsikKod], 
[Extent1].[LokasyonSeviye] AS [LokasyonSeviye], 
[Extent1].[Yetkili] AS [Yetkili], 
[Extent1].[Engelli] AS [Engelli], 
[Extent1].[LokasyonEngelli] AS [LokasyonEngelli]
FROM [dbo].[sayKullaniciYetkiView] AS [Extent1]
WHERE ([Extent1].[KullaniciId] = @p__linq__0) AND ([Extent1].[YetkiKod] = @p__linq__1)',N'@p__linq__0 uniqueidentifier,@p__linq__1 nvarchar(4000)',@p__linq__0='283CCB41-3BDF-4BEF-BD26-E46191CA069D',@p__linq__1=N'FIN.SATISFATURA.E'

問題はEFにあると思います。それを証明するために、次のようなコードを実行します。

        var yetkiler1 = Context.Set<KullaniciYetkiView>().Where(y => y.KullaniciId == kullaniciId && y.YetkiKod == yetkiKod).Distinct().ToList();
        var yetkiler2 = Context.Set<KullaniciYetkiView>().Where(y => y.KullaniciId == kullaniciId && y.YetkiKod == yetkiKod).ToList().Distinct();

最初のクエリは115行を返し、2番目のクエリは1を返します。

ここに画像の説明を入力してください

私は何が欠けていますか?

前もって感謝します。

4

1 に答える 1

0

クイントンが言ったように、私のモデル構成は間違っています。

キーとして複数の列がある場合は、次のようなコンテキストでそれらを設定する必要がありますOnModelCreatingメソッドmodelBuilder.Entity<KullaniciYetkiView>().HasKey(ky => new { ky.KullaniciId, ky.LokasyonId, ky.YetkiId });

HasKeyメソッドの説明は次のとおりです。http://msdn.microsoft.com/en-us/library/gg671266(v=vs.103).aspx

于 2013-01-07T16:02:57.313 に答える