我通过代码优先定义了下表:
public class Action
{
public int ActionId { get; set; }
public int? EmailMessageId { get; set; }
public virtual EmailMessage EmailMessage { get; set; }
}
public class EmailMessage
{
public int EmailMessageId { get; set; }
public string Content { get;set;
}
当使用相应的 EmailMessage 创建操作时,删除操作不会删除 EmailMessage 中的条目。似乎 EF 仅在 1-many 关系上创建级联删除。在这种情况下,关系是 0 或 1 关系,默认情况下没有设置级联删除。
然后我添加了流畅的配置:
modelBuilder
.Entity<Action>()
.HasOptional(x =>x.EmailMessage)
.WithMany()
.HasForeignKey(x=>x.EmailMessageId)
.WillCascadeOnDelete(true);
在 Management Studio 中查看架构时,这似乎正确设置了 CASCADE DELETE。但是,当我从数据库中手动删除 Action 中的行时,EmailMessage 中的行仍然存在。
我在这里到底做错了什么?当我在配置中使用“WithOptionalDependent()”时,我想我可能会到达某个地方。但是,当我查看架构时,它已经引入了“EmailMessage_EmailMessageId”,而我的表中已经有 EmailMessageId?
谁能告诉我这里有什么问题?