我要通過代碼首先定義如下表:爲什麼EF級聯刪除不能在0到1的關係上工作?
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只會在一對多關係上創建級聯刪除。在這種情況下,關係是0或1關係,默認情況下沒有設置級聯刪除。
我加入了流暢的配置:
modelBuilder
.Entity<Action>()
.HasOptional(x =>x.EmailMessage)
.WithMany()
.HasForeignKey(x=>x.EmailMessageId)
.WillCascadeOnDelete(true);
這似乎是正確設置在觀看Management Studio中的架構時級聯刪除。但是當我從數據庫中手動刪除行時,EmailMessage中的行仍然存在。
我究竟在做什麼錯在這裏? 我以爲我可能會在配置中使用'WithOptionalDependent()'時出現問題。但是當我查看模式時,當我在表中已經有EmailMessageId時,它已經引入了「EmailMessage_EmailMessageId」。
任何人都可以建議這裏有什麼問題嗎?
好的。從概念上講,它感覺就像EmailMessage是一個孩子,因爲導航屬性是從Action指向EmailMessage。如果這個關係是0-many,而EmailMessage是一個Action內部的集合,那麼這會不會是一個孩子? – jaffa 2012-07-09 15:32:53
正確,但'EmailMessage'會有一個'ActionId'字段,其外鍵指向'Action'。最後,數據庫不知道你如何配置你的POCO模型,它只知道主鍵/外鍵關係。 – PinnyM 2012-07-09 16:23:54