0

我通过代码优先定义了下表:

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?

谁能告诉我这里有什么问题?

4

2 回答 2

0

级联删除旨在在删除级时删除级,而不是相反。在这种情况下,Action 是与 EmailMessage 父级的外键关联的子级。所以删除Action不会影响EmailMessage,但是删除EmailMessage应该级联删除到Action。

于 2012-07-09T14:25:20.660 回答
0

我刚刚意识到使用“contextName.Entry(parentStudySession).State = System.Data.Entity.EntityState.Deleted;” 删除一些有几个孩子的父母..我谈论的是 EF 6.3,EF 不会为我们删除孩子,甚至没有删除父母本身,即使我们有级联删除约束。相反,它会给出错误“操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性设置为一个空值。如果外键不..."

相反,当我使用“contextName.StudySession.Remove(parentStudySession);”时 , EF 6.3 成功删除了 PARENT 和 CHILDREN ...我有级联删除约束。 T·阿达科格鲁

于 2015-12-10T22:40:31.503 回答