Entity framework EF6编码一对一零

Entity framework EF6编码一对一零,entity-framework,ef-code-first,code-first,Entity Framework,Ef Code First,Code First,我正在尝试配置此关系,但无法先使用代码 EVENT Id ... ScheduleId SCHEDULE Id ... Type EventId 一个事件总是有一个时间表来查看它的日期、地点……但是时间表可以有一个事件,也可以没有,这取决于os时间表的类型。计划可以是不同的类型,其中之一是事件。当类型为event时,字段EventId将指向事件 所以我不想创建一个常规的一对一关系,其中一个表是主体,我们使用表Id作为关系 HasOptional(x => x.Schedule).Wit

我正在尝试配置此关系,但无法先使用代码

EVENT
Id
...
ScheduleId

SCHEDULE
Id
...
Type
EventId
一个事件总是有一个时间表来查看它的日期、地点……但是时间表可以有一个事件,也可以没有,这取决于os时间表的类型。计划可以是不同的类型,其中之一是事件。当类型为event时,字段EventId将指向事件

所以我不想创建一个常规的一对一关系,其中一个表是主体,我们使用表Id作为关系

HasOptional(x => x.Schedule).WithOptionalPrincipal(p => p.Event).Map(x => x.MapKey("EventId")).WillCascadeOnDelete(true);
在SQL Server中,结果必须是:

EVENT
FK Event.ScheduleId -> Schedule.Id -> OnDelete NO Action

SCHEDULE
FK Schedule.EventId -> Event.Id -> OnDelete Cascade
因此,当您删除事件时,相应的计划将被删除,但如果计划“附加”到事件,则无法删除该计划,您只能删除EventId=null的计划

我试过:

On EVENT 
HasRequired(p => p.Schedule).WithOptional(a => a.Event).WillCascadeOnDelete(false)

On SCHEDULE
HasOptional(p => p.Event).WithRequired(m => m.Schedule).WillCascadeOnDelete(true);
但它总是将事件PK Id作为foreing键,这不是我想要的

如何首先使用EF代码实现此配置


提前感谢。

在查看了很多帖子后,我找到了解决方案

EVENT
Id
...
ScheduleId -> NO
Schedule (Navigation property)

SCHEDULE
Id
...
Type
EventId -> NO
Event (Navigation property)
以及选择:

HasOptional(x => x.Schedule).WithOptionalPrincipal().Map(x => x.MapKey("EventId")).WillCascadeOnDelete(true);

HasOptional(x => x.Event).WithOptionalPrincipal().Map(x => x.MapKey("ScheduleId"));
我希望有人觉得这很有趣,可以解决任何类似的情况

更新

事实上,我们只需要以下几点,因为EF负责处理关系

HasOptional(x => x.Schedule).WithOptionalPrincipal(p => p.Event).Map(x => x.MapKey("EventId")).WillCascadeOnDelete(true);
不需要另一条线