我正在使用EntityFramework 4.3.1并尝试运行像这样的查询
Context.Set<KullaniciYetkiView>().Where(y => y.KullaniciId == kullaniciId && y.YetkiKod == yetkiKod)
当我运行查询并按预期返回115条记录时。但是当我看到记录时,所有这些都是一样的。所以我从分析器中搜索查询以查看我缺少的内容,是查看以下查询并从管理工作室返回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行,第二个返回1.
我错过了什么?
提前致谢。
答案 0 :(得分:0)
如果您有超过1列作为键,则应在上下文中设置它们 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