C# 使用实体框架导航属性避免Sql Server表中的自引用实体重复
我在SqlServer中创建了一个表,如下所示: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].
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
会发生什么?相同的结果集?我们的应用程序逻辑实现不允许这种引用,所以这种情况不会发生。这很好地解决了这个问题。非常感谢。