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);
不需要另一条线