C# 实体框架sql语句包含具有复合主键的实体的奇数自联接
EF 6.1.3(数据库优先) .net framework 4.6.1 两个表之间的简单映射,如下图所示 这里是生成的图表(由向导自动生成) 声明C# 实体框架sql语句包含具有复合主键的实体的奇数自联接,c#,.net,entity-framework,C#,.net,Entity Framework,EF 6.1.3(数据库优先) .net framework 4.6.1 两个表之间的简单映射,如下图所示 这里是生成的图表(由向导自动生成) 声明 Tickets\u new.asqueryable().Dump()在下面的sql查询中被翻译 SELECT [Extent1].[IdSerie_Ticket] AS [IdSerie_Ticket], [Extent1].[IdTicket] AS [IdTicket], [Extent
Tickets\u new.asqueryable().Dump()
在下面的sql查询中被翻译
SELECT
[Extent1].[IdSerie_Ticket] AS [IdSerie_Ticket],
[Extent1].[IdTicket] AS [IdTicket],
[Extent2].[IdNatura] AS [IdNatura]
FROM [dbo].[Tic_Tickets_new] AS [Extent1]
LEFT OUTER JOIN [dbo].[Tic_Tickets_new] AS [Extent2] ON ([Extent2].[ IdNatura] IS NOT NULL) AND ([Extent1].[IdSerie_Ticket] = [Extent2].[IdSerie_Ticket])
AND ([Extent1].[IdTicket] = [Extent2].[IdTicket])
惊喜!加入的目的是什么?好像完全没用了
删除复合主键并就地使用单个字段代理键,generatesql语句变得简单而平滑,无需任何连接
更新
关于评论可能是我需要明确这篇文章的意图;我在上面解释的行为是我在不同的项目(首先是数据库)上验证过的行为,当我尝试加载参与*到0..1关联或0..1到0..1关联的实体时,该实体具有复合主键,并且关联定义为独立关联并启用延迟加载;所以我认为这是一种设计行为。我已经有了一个解决方案,该解决方案是将关联类型从独立关联更改为外键关联。
但问题是为什么?查询有效吗?看起来好像有人想确保在插入数据时IdNatura和IdTicket是唯一的一对一。当然可以,但这个例子是一个简化的例子,在我的真实案例中,我有很多导航属性(关联)与上面的一样,对于每个关联,SQL语句中都会添加一个新的连接,使性能变得最差和最糟糕。考虑到您的,我认为我们需要一个完整的连接。我认为我们需要在POCO上查看您的Fluent API/数据注释属性,以便真正猜测发生这种情况的原因。可能是某些奇怪的FK在代码中的某个地方引用了自己。ORM通常会生成错误的查询。接受这一点。