在Entity Framework中创建递归实体的正确方法是什么?

我目前正在使用VS 2010 RC,我正在尝试创建一个包含递归自引用实体的模型。 目前,当我从模型中导入实体时,我得到一个错误,指示父属性不能成为关联的一部分,因为它设置为“已计算”或“身份”,但我不确定为什么会这样做。 我一直在手动编辑文件来解决这个错误,但是模型根本不起作用。

使递归实体在Entity Framework中工作的正确方法是什么。

默认情况下导入的模型不起作用。 我已经尝试了几次调整,每次都会得到不同类型的错误。 在这一点上,我正在寻找解决方案和解释为什么解决方案是正确的。

相关数据库对象

CREATE TABLE [dbo].[Appointments]( [AppointmentId] [int] IDENTITY(1,1) NOT NULL, [Description] [nvarchar](1024) NULL, [Start] [datetime] NOT NULL, [End] [datetime] NOT NULL, [Username] [varchar](50) NOT NULL, [RecurrenceRule] [nvarchar](1024) NULL, [RecurrenceState] [varchar](20) NULL, [RecurrenceParentId] [int] NULL, [Annotations] [nvarchar](50) NULL, [Application] [nvarchar](100) NOT NULL, CONSTRAINT [PK_Appointments] PRIMARY KEY CLUSTERED ( [AppointmentId] ASC ) ) GO ALTER TABLE [dbo].[Appointments] WITH CHECK ADD CONSTRAINT [FK_Appointments_ParentAppointments] FOREIGN KEY([RecurrenceParentId]) REFERENCES [dbo].[Appointments] ([AppointmentId]) GO ALTER TABLE [dbo].[Appointments] CHECK CONSTRAINT [FK_Appointments_ParentAppointments] GO EDMX 

                                                                                                

因为我得到编译器错误:

无法为列成员“AppointmentId”指定条件,因为它标记为“Computed”或“Identity”StoreGeneratedPattern。

如果删除该错误消失,但只是介绍另一个关于:

映射片段的问题从第3350行开始,3380:EntityTypes SafetyTrackerModel.Appointment被映射到表约会中的相同行。 映射条件可用于区分这些类型映射到的行。

恰好是上面标记为[1]的行。

在这一点上,我迷失了我应该做的事情。 我已经尝试了许多很多东西,最终我已经没有智能的东西试图进入货物崇拜的土地了。

我真的很想了解这里的问题。

EF可以支持递归对象。 您只需导入模型,EF将获取关系,并允许您进行递归。

请参阅MSDN 。

关于你的FK,我不明白为什么你有一个CHECK CONSTRAINT。 添加FK应该是这样的:

 ALTER TABLE Appointments ADD FOREIGN KEY (RecurrenceParentId) REFERENCES Appointments(AppointmentId); 

也许你的FK创作出了问题,EF无法处理它?

希望这可以帮助 !

编辑:哈哈,刚看到它被问到9个月前……好吧,没关系:)