我通过代码优先定义了下表:
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时?
有谁能告诉我这里有什么问题?
答案 0 :(得分:0)
级联删除旨在删除父时删除子,而不是相反。在这种情况下,Action是与EmailMessage父级的外键关联的子级。因此,删除Action不会影响EmailMessage,但删除EmailMessage应该将删除级联到Action。
答案 1 :(得分:0)
我刚刚意识到使用“contextName.Entry(parentStudySession).State = System.Data.Entity.EntityState.Deleted;”删除一些带有几个孩子的父母..我在谈论EF 6.3,EF不会为我们删除孩子,即使我们已经删除了约束,也没有删除父本身。相反,它给出错误“操作失败:由于一个或多个外键属性不可为空,因此无法更改关系。当对关系进行更改时,相关的外键属性设置为一个空值。如果外键不...“
相反,当我使用“contextName.StudySession.Remove(parentStudySession);”时, EF 6.3成功删除了PARENT和CHILDREN ...我在删除约束上有级联。 T.Adakoğlu