如何使用 Entity Framework 核心删除没有外键的相关数据
How to delete related data with no foreign key using Entity Framework Core
我希望在我的数据库上下文中使用它 class:
OnDelete(DeleteBehavior.Cascade)
但它位于 SQL 服务器 table 上,没有外键。
我的 parent table, TransplantList
, 有一列 heartId
, 对应于 table HeartList
看起来像这样在 SQL 服务器中:
heartId
heartName
heartLocation
heartType
TransplantList
每行只能有一个 heartId
。
当我删除 TransplantList
中的一行时,我还想删除(如果它不是 NULL)与其关联的 heartId
。
我尝试将其添加到我的上下文数据库中:
Entity.OnDelete(DeleteBehavior.Cascade);
但这只会给我一个错误。
有办法吗?
谢谢!
Cascade
操作不是 Entity Framework 的一部分。它只定义它。操作本身仅由数据库服务器根据 foreign-key 关系执行。如果您的数据库没有定义这种关系,Entity Framework 将无能为力。
至于-
How to delete related data with no foreign key using Entity Framework
Core
检查是否存在相关实体。如果是,删除它 -
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();
我希望在我的数据库上下文中使用它 class:
OnDelete(DeleteBehavior.Cascade)
但它位于 SQL 服务器 table 上,没有外键。
我的 parent table, TransplantList
, 有一列 heartId
, 对应于 table HeartList
看起来像这样在 SQL 服务器中:
heartId
heartName
heartLocation
heartType
TransplantList
每行只能有一个 heartId
。
当我删除 TransplantList
中的一行时,我还想删除(如果它不是 NULL)与其关联的 heartId
。
我尝试将其添加到我的上下文数据库中:
Entity.OnDelete(DeleteBehavior.Cascade);
但这只会给我一个错误。
有办法吗?
谢谢!
Cascade
操作不是 Entity Framework 的一部分。它只定义它。操作本身仅由数据库服务器根据 foreign-key 关系执行。如果您的数据库没有定义这种关系,Entity Framework 将无能为力。
至于-
How to delete related data with no foreign key using Entity Framework Core
检查是否存在相关实体。如果是,删除它 -
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();