コードファーストで定義された次のテーブルがあります。
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 対多の関係でのみカスケード削除を作成するようです。この場合、関係は 0 または 1 の関係であり、デフォルトではカスケード削除が設定されていません。
次に、流暢な構成を追加しました。
modelBuilder
.Entity<Action>()
.HasOptional(x =>x.EmailMessage)
.WithMany()
.HasForeignKey(x=>x.EmailMessageId)
.WillCascadeOnDelete(true);
Management Studioでスキーマを表示すると、CASCADE DELETEが正しく設定されているようです。しかし、アクションから行をデータベースから手動で削除すると、EmailMessage の行が残ります。
ここで私は正確に何を間違っていますか?構成で「WithOptionalDependent()」を使用すると、どこかに到達する可能性があると思いました。しかし、スキーマを見ると、テーブルに既に EmailMessageId があるのに、「EmailMessage_EmailMessageId」が導入されていましたか?
ここで何が悪いのか誰にもアドバイスできますか?