我希望在我的数据库上下文类中使用它:
OnDelete(DeleteBehavior.Cascade)
但它位于没有外键的 SQL Server 表上。
我的父表
TransplantList
有一个列 heartId
,它对应于表 HeartList
,在 SQL Server 中如下所示:
heartId
heartName
heartLocation
heartType
TransplantList
每行只能有一个 heartId
。
当我删除
TransplantList
中的一行时,我还想删除(如果它不为 NULL)与其关联的 heartId
。
我尝试将其添加到我的上下文数据库中:
Entity.OnDelete(DeleteBehavior.Cascade);
但这只会给我一个错误。
有办法做到这一点吗?
谢谢!
如果父子表没有任何关系和外键,Entity Framework core 无法为您级联删除子数据。因此,在删除子数据和父数据之前,您必须手动获取子数据。
var heart = context.Hearts.Where(x => x.HeartId == transparent.HeartId).FirstOrDefault();
if (heart != null)
context.Hearts.Remove(heart);
context.Transparents.Remove(transparent);
context.SaveChanges();
Cascade
操作不是实体框架的一部分。它仅定义它。该操作本身由数据库服务器根据外键关系单独执行。如果您的数据库没有定义该关系,则实体框架无能为力。
至于-
如何使用实体框架删除没有外键的相关数据 核心
检查是否存在相关实体。如果有,请删除它 -
var transplant = await context.Transplants.FindAsync(id);
if(transplant != null)
{
// check if heartId column on Transplant has a non-null value
if(transplant.HeartId != null)
{
// query the Heart entity with heartId
Heart heart = await context.Hearts.FirstOrDefaultAsync(p => p.HeartId == transplant.HeartId);
// if a Heart entity is found, Delete it
if(heart != null)
context.Hearts.Remove(heart);
}
context.Transplants.Remove(transplant);
await context.SaveChangesAsync();
}