如何使用 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();