实体框架级联不删除子节点,但设置为空



这是我的两个模型:

public class SystemMessage
{
[Key]
public string Id { get; set; }
public string Name { get; set; }
public string Message { get; set; }
public string AdministratorId { get; set; }
public string Author { get; set; }
public bool IsActive { get; set; }
public DateTime CreatedOn { get; set; } = DateTime.Now;
public DateTime UpdatedOn { get; set; } = DateTime.Now;
public IList<SystemMessageAttachment> SystemMessageAttachment { get; } = new List<SystemMessageAttachment>();
}
public class SystemMessageAttachment
{
[Key]
public string Id { get; set; }
public string Name { get; set; }
public string Link { get; set; }
public string Location { get; set; }
public string MIMEType { get; set; }
public string FileType { get; set; }
public string SystemMessageId { get; set; }
public virtual SystemMessage SystemMessage { get; set; }
public DateTime CreatedOn { get; set; } = DateTime.Now;
}

在DbContext中,在onModelCreating函数下,我设置了这个关系:

modelBuilder.Entity<SystemMessageAttachment>()
.HasOne(b => b.SystemMessage)
.WithMany(b=>b.SystemMessageAttachment)
.OnDelete(DeleteBehavior.Cascade);

但是,当我删除系统消息时,它的子消息即附件不会被删除?SystemMessageId只能设置为NULL。

我错过什么了吗?为什么级联在这里不起作用?

编辑:我是这样删除系统消息的:

public bool Delete(string Id)
{
try
{
var a = Get(Id);
if (a == null)
{
return false;
}
dbContext.SystemMessage.Remove(a);
dbContext.SaveChanges();
return true;
}
catch (Exception e)
{
logger.LogError(e, "Failed to delete System Message" + " - " + e.Message);
return false;
}
}

如果你想使用级联删除,你必须包含子元素:

var removingRow=_context.Set<SystemMessage>()
.Include(x=> x.SystemMessageAttachment)
.Where(x => x.Id ==id)
.FirstOrDefault();
if(removingRow != null)
{
_context.Remove(removingRow);
_context.SaveChanges();
}

最新更新