Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架sql语句包含具有复合主键的实体的奇数自联接_C#_.net_Entity Framework - Fatal编程技术网

C# 实体框架sql语句包含具有复合主键的实体的奇数自联接

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

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], 
        [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通常会生成错误的查询。接受这一点。