代码之家  ›  专栏  ›  技术社区  ›  ev vk

使用linq的实体框架级联删除

  •  2
  • ev vk  · 技术社区  · 6 年前

    Products 还有另一张桌子 ProductDetails :

      CreateTable(
                "dbo.Products",
                c => new
                    {
                        Id = c.Guid(nullable: false),
                        // other fields here
                        // ....
                        //....
                    })
                .PrimaryKey(t => t.Id)
                .ForeignKey("dbo.ProductType", t => t.ProductTypeId, cascadeDelete: false)
                .ForeignKey("dbo.AspNetUsers", t => t.UserId, cascadeDelete: false)
                .Index(t => t.UserId)
                .Index(t => t.ProductTypeId);
    
     CreateTable(
                "dbo.ProductDetails",
                c => new
                    {
                        Id = c.Guid(nullable: false),
                        // other fields here
                        // ....
                        //....
                    })
                .PrimaryKey(t => t.Id)                
                .ForeignKey("dbo.Products", t => t.ProductId, cascadeDelete: false)
                .Index(t => t.ProyectoId)
    

    如你所见,当我创建这个表时,我禁用了 cascadeDelete

     var product = getProductById(Id);
    _dbContext.Product.Remove(product);
    _dbContext.SaveChanges();
    

    如何级联删除我的产品表?我能做点类似查询的事情吗 级联删除 ?

    _dbContext.Product.cascadeDelete...   //this is not real code
    

    如果不可能的话,我怎么能改变我的两张桌子 产品 产品详细信息

    谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   TanvirArjel    6 年前

    解决方案1:

    ProductDetails Product 产品 具体如下:

    List<ProductDetails> productDetailsList =  _dbContext.ProductDetails.Where(pd => pd.ProductId == Id).ToList();
     _dbContext.ProductDetails.RemoveRange(productDetailsList);  
    
    var product = getProductById(Id);
    _dbContext.Product.Remove(product);
    _dbContext.SaveChanges();
    

    在你的 DbContext 类重写实体配置,如下所示:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
       base.OnModelCreating(modelBuilder);
    
       modelBuilder.Entity<ProductDetails>().HasRequired(pd => pd.Product).WithMany(p => p.ProductDetails).HasForeignKey(pd => pd.ProductId).WillCascadeOnDelete(true);
    }
    

    希望你的问题能解决!