【问题标题】:Entity Framework query result实体框架查询结果
【发布时间】:2012-12-10 08:29:03
【问题描述】:

我正在使用 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。

我错过了什么?

提前致谢。

【问题讨论】:

  • KullaniciId 列似乎有些可疑。生成的查询将其视为唯一 ID,但它返回 115 条记录?
  • 您的模型配置可能有问题。查看stackoverflow.com/a/7955773/1099260
  • 是的,必须返回115条记录。

标签: c# entity-framework-4


【解决方案1】:

就像 Quinton 说的我的模型配置错误。

如果您有超过 1 列作为键,则应将它们设置在上下文 OnModelCreating 方法中,例如 modelBuilder.Entity&lt;KullaniciYetkiView&gt;().HasKey(ky =&gt; new { ky.KullaniciId, ky.LokasyonId, ky.YetkiId });

这里是 HasKey 方法的解释。 http://msdn.microsoft.com/en-us/library/gg671266(v=vs.103).aspx

【讨论】:

    猜你喜欢
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多