【问题标题】:How to delete related data with no foreign key using Entity Framework Core如何使用 Entity Framework Core 删除没有外键的相关数据
【发布时间】:2021-01-02 14:52:25
【问题描述】:

我希望在我的数据库上下文类中使用它:

 OnDelete(DeleteBehavior.Cascade)

但它位于没有外键的 SQL Server 表上。

我的父表TransplantList 有一个列heartId,它对应于一个表HeartList,在SQL Server 中看起来像这样:

 heartId
 heartName
 heartLocation
 heartType

TransplantList 每行只能有一个heartId。

当我删除TransplantList 中的一行时,我还想删除(如果它不为NULL)与之关联的heartId。

我尝试将其添加到我的上下文数据库中:

 Entity.OnDelete(DeleteBehavior.Cascade);

但这只会给我一个错误。

有没有办法做到这一点?

谢谢!

【问题讨论】:

    标签: sql-server-2012 entity-framework-core dbcontext


    【解决方案1】:

    如果父表和子表没有任何关系和外键,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();
    

    【讨论】:

      【解决方案2】:

      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();
          }    
      

      【讨论】:

        猜你喜欢
        • 2018-09-22
        • 2011-01-28
        • 2017-08-01
        • 1970-01-01
        • 2021-12-03
        • 2023-04-02
        • 2019-02-23
        • 2021-04-09
        • 2022-09-22
        相关资源
        最近更新 更多