如何解决如何使用Entity Framework Core删除没有外键的相关数据
我希望在我的数据库上下文类中使用它:
OnDelete(DeleteBehavior.Cascade)
但是它在没有外键的SQL Server表上。
我的父表TransplantList
有一个列heartId
,它对应于一个表HeartList
,在SQL Server中看起来像这样:
heartId
heartName
heartLocation
heartType
TransplantList
每行只能有一个heartId
。
当我删除TransplantList
中的一行时,我也想删除(如果不是NULL)与之关联的heartId
。
我尝试将其添加到上下文数据库中
Entity.OnDelete(DeleteBehavior.Cascade);
但这只是给我一个错误。
反正有这样做吗?
谢谢!
解决方法
Cascade
操作不是实体框架的一部分。它仅定义它。该操作本身仅由数据库服务器根据外键关系执行。如果您的数据库没有定义这种关系,那么实体框架将无能为力。
至-
如何使用Entity Framework删除没有外键的相关数据 核心
检查是否存在相关实体。如果是这样,请将其删除-
var transplant = await context.Transplants.FindAsync(id);
if(transplant != null)
{
context.Transplants.Remove(transplant);
// check if heartId column 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);
}
await context.SaveChangesAsync();
}
,
如果父表和子表没有任何关系和外键,则Entity Framework核心无法为您级联删除子数据。因此,在删除子级和父级数据之前,您必须手动获取子级数据。
var heart = context.Hearts.Where(x => x.HeartId == transparent.HeartId).FirstOrDefault();
if (heart != null)
context.Hearts.Remove(heart);
context.Transparents.Remove(transparent);
context.SaveChanges();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。