参见英文答案 Entity Framework maps data wrong when the identity column is not unique 1个不知道为什么它被作为一个骗局联系起来.问题是不同的.答案是不同的.不知道该改变...
参见英文答案 > Entity Framework maps data wrong when the identity column is not unique 1个
不知道为什么它被作为一个骗局联系起来.问题是不同的.答案是不同的.不知道该改变什么.如果有人看到我遗失的内容,请告诉我……
我使用这两个查询获得了不同数量的结果.在分析了几个小时后,我需要放弃,承认我无法发现重要性的差异.由于我的方法库被清空,我正在寻求帮助.
LINQ
List<Uno> result = context.Unos
.Join(context.Duos, uno => uno.CommonId, duo => duo.CommonId,
(uno, duo) => new { Uno = uno, Duo = duo })
.Where(item => item.Uno.Amount > 0
&& item.Duo.Type == 2)
.Select(item => item.Uno)
.ToList();
SQL
select * from Uno as u
join Duo as d on d.CommonId = u.CommonId
where u.Amount > 0
and d.Type = 2
问题一是如果上述两个陈述确实相同或者我错过了什么.第二个问题是我缺少的(如果有的话)或如何解决它(如果我不是).
>对同一数据库进行调用.
>结果数量相差很大(142和1437).
>为内连接提取相同的结果集.
> Uno和Duo都是视图,而不是表格.
我还能验证什么?
编辑
经过社区的一些非常好的支持,我们确定LINQ查询可以通过以下命令进行SQL化.
var wtd = context.Unos
.Join(context.Duos, uno => uno.CommonId, duo => duo.CommonId,
(uno, duo) => new { Uno = uno, Duo = duo })
.Where(item => item.Uno.Amount > 0
&& item.Duo.Type == 2)
.Select(item => item.Uno)
.ToString();
疯狂的是在SQL Manager中执行该字符串会产生142个结果(就像上面的例子中的查询,SQL版本一样),它与它的差别很小.但是,执行LINQ查询本身会产生1437个结果.我太困惑甚至不敢哭…
“SELECT \r\n [Extent1].[CommonId] AS [CommonId], \r\n [Extent1].[X] AS [X]\r\n FROM (SELECT \n [Uno].[CommonId] AS [CommonId], \n [Uno].[X] AS [X]\n FROM [Finance].[Uno] AS [Uno]) AS [Extent1]\r\n INNER JOIN (SELECT \n [Duo].[CommonId] AS [CommonId], \n [Duo].[Y] AS [Y], \n [Duo].[Z] AS [Z], \n [Duo].[Type] AS [Type], \n [Duo].[U] AS [U], \n [Duo].[V] AS [V]\n FROM [Finance].[Duo] AS [Duo]) AS [Extent2] ON [Extent1].[CommonId] = [Extent2].[CommonId]\r\n WHERE ([Extent1].[X] > cast(0 as decimal(18))) AND ([Extent2].[Type] = @p__linq__0)”
解决方法:
当在实体框架中映射视图时经常会发生这种情况.与常规数据库表不同,视图通常没有明确唯一的键值.当EF遇到具有相同主键值的行时,它只会复制属于它已知道的键的行.在连接中,这可能导致EF生成更多子记录,因为这个第一个已知行可能比实际数据库行有更多子项.
修复方法是确保视图具有唯一标识行的字段(或字段组合).当然,在EF中,这应该被映射为(可能是复合的)主键.
我不知道为什么EF显示这种行为.我认为应该有可能抛出一个异常,它实现了重复的实体.这种“特征”总会引起很多混乱.
本文标题为:c# – LINQ和SQL中看似等效的查询返回不同的结果
- C# winform程序读取文本中的值实例讲解 2023-01-22
- C#将DataGridView中的数据保存到CSV和Excel中 2023-06-05
- windows系统下,如何在C#程序中自动安装字体 2023-03-14
- C#怎样实现文件下载断点续传 2023-04-15
- C#绘制中国象棋棋盘 2023-03-29
- WPF InkCanvas基本操作方法详解 2023-01-06
- Unity3D实现待机状态图片循环淡入淡出 2023-02-16
- C#使用Effects给图片增加阴影效果 2023-06-15
- 通过 C#/VB.NET 代码将 Excel 工作表拆分为单独的文件 2023-07-04
- C#中序列化实现深拷贝,实现DataGridView初始化刷新的方法 2022-10-27