相关疑难解决方法(0)

实体框架返回错误数据

我有一个Entity Framework 6.1项目,它正在查询SQL Server 2012数据库表并返回错误的结果.

为了说明发生了什么,我创建了两个应该具有完全相同结果的查询.该表ProjectTable有23列和20500行:

var test1 = db.ProjectTable
    .GroupBy(t => t.ProjectOwner)
    .Select(g => g.Key)
    .ToArray();

var test2 = db.ProjectTable
    .ToArray()
    .GroupBy(t => t.ProjectOwner)
    .Select(g => g.Key)
    .ToArray();
Run Code Online (Sandbox Code Playgroud)

查询旨在获取表中所有不同项目所有者的列表.第一个查询在SQL Server上执行繁重的工作,第二个查询将整个表下载到内存中,然后在客户端处理它.

第一个变量test1的长度约为300项.第二个变量test2的长度为5.

以下是EF生成的原始SQL查询:

-- test1
SELECT [Distinct1].[ProjectOwner] AS [ProjectOwner]
FROM ( SELECT DISTINCT
       [Extent1].[ProjectOwner] AS [ProjectOwner]
       FROM [dbo].[ProjectTable] as [Extent1]
     ) AS [Distinct1]

-- test2
SELECT Col1, Col2 ... ProjectOwner, ... Col23
FROM [dbo].[ProjectTable]
Run Code Online (Sandbox Code Playgroud)

当我运行此查询并分析返回的实体时,我注意到返回了完整的20500行,但该ProjectOwner列被仅有5个不同用户中的一个覆盖!

var test = db.ProjectTable.ToArray();
Run Code Online (Sandbox Code Playgroud)

我想也许是SQL Server,所以我做了一个数据包跟踪并在TDS上过滤.随机查看原始流我看到很多名称不在5的列表中,所以我知道数据正在通过网络正确发送.

如何查看EF获取的原始数据?有什么东西可能会搞乱缓存并拉出不正确的结果吗? …

c# sql-server entity-framework

7
推荐指数
1
解决办法
2266
查看次数

什么是edmx文件中的"实体密钥"?

在C#项目中,首先使用EF数据库,我使用SQL Server管理工作室为表添加了一个外键.

之后,回到Visual Studio我已经从数据库更新了模型,但是我看不到两个受影响的表之间的"链接"(即连接.edmx图中两个表的行).因此,在子表的下拉列表中,我看到了这个选项"实体键",当我点击它时,出现了"链接".说实话,我不知道,我无法理解它的作用,因为我现在可以检查或取消选中它而不会丢失,再说让我们说"链接".

你知道为什么会这样吗?

谢谢!!

c# edmx edmx-designer

3
推荐指数
1
解决办法
4845
查看次数

标签 统计

c# ×2

edmx ×1

edmx-designer ×1

entity-framework ×1

sql-server ×1