Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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 Server表中的自引用实体重复_C#_Sql_Sql Server_Entity Framework - Fatal编程技术网

C# 使用实体框架导航属性避免Sql Server表中的自引用实体重复

C# 使用实体框架导航属性避免Sql Server表中的自引用实体重复,c#,sql,sql-server,entity-framework,C#,Sql,Sql Server,Entity Framework,我在SqlServer中创建了一个表,如下所示: CREATE TABLE [dbo].[Reg]( [Reg_Id] [int] IDENTITY(1,1) NOT NULL, [RiferimentoRRN_Reg] [int] NULL, ) ALTER TABLE [dbo].[Reg] WITH CHECK ADD CONSTRAINT [FK_Reg_Reg] FOREIGN KEY([RiferimentoRRN_Reg]) REFERENCES [dbo].

我在SqlServer中创建了一个表,如下所示:

CREATE TABLE [dbo].[Reg](
    [Reg_Id] [int] IDENTITY(1,1) NOT NULL,
    [RiferimentoRRN_Reg] [int] NULL,
)

ALTER TABLE [dbo].[Reg]  WITH CHECK ADD  CONSTRAINT [FK_Reg_Reg] FOREIGN KEY([RiferimentoRRN_Reg])
REFERENCES [dbo].[Reg] ([Reg_Id])
正如您所看到的,一条记录可以有一个来自同一个表的相关实体(或不是)

因此,如果RIFERImentorn_Reg不为空,实体框架将创建相关的Reg实体

如何创建一个查询(EF或仅仅是SQL),只选择具有相关实体的记录 或者没有这种关系但没有任何重复实体的实体

这可以是一个例子:

 Reg_Id  RiferimentoRRN_Reg
|  1   |                   |
|  2   |       1           |
|  3   |                   |
|  4   |       3           |
|  5   |                   |
查询结果应为:

 Reg_Id  RiferimentoRRN_Reg
|  2   |       1           |
|  4   |       3           |
|  5   |                   |
因为主键为3和1的记录是通过外键引用的 因此必须避免它们(5永远不会被引用,并且必须包含在结果集中)

这使我可以使用实体框架导航属性导航到相关实体(如果存在),避免任何重复的实体


提前谢谢,希望我的解释足够清楚。

只是我脑子里的一个简单问题。但是请注意,上面的JamieD77评论不会在这个查询中处理

SELECT D1.Reg_ID, D1.RiferimentoRRN_Reg FROM Data D1
LEFT OUTER JOIN Data D2 ON D1.Reg_ID = D2.RiferimentoRRN_Reg
WHERE D2.RiferimentoRRN_Reg IS NULL
更新

下面的查询应该处理JamieDD77的评论

SELECT D1.Reg_ID, D1.RiferimentoRRN_Reg FROM Data D1
LEFT OUTER JOIN Data D2 ON D1.Reg_ID = D2.RiferimentoRRN_Reg
WHERE (D2.RiferimentoRRN_Reg IS NOT NULL AND D1.RiferimentoRRN_Reg IS NOT NULL) 
OR (D2.RiferimentoRRN_Reg IS NULL)

我相信您将能够轻松地将其转换为LINQ查询。

如果
Reg\u Id=3
riferionern\u Reg=2
会发生什么?相同的结果集?我们的应用程序逻辑实现不允许这种引用,所以这种情况不会发生。这很好地解决了这个问题。非常感谢。