MVC .Net Cascade Deleting when using EF Code First Approach

后端 未结 2 1331
情歌与酒
情歌与酒 2021-02-14 06:10

I\'m pretty new to MVC and i\'m having troubles with cascade deleting. For my model I the following 2 classes:

    public class Blog
    {
        [Key]
                 


        
相关标签:
2条回答
  • 2021-02-14 06:19

    That is because EF by default does not enforce cascade deletes for optional relationships. The relationship in your model is inferred as optional.

    You can add a non nullable scalar property(BlogId) of the FK

    public class BlogEntry
    {
        [Key]
        public int Id { get; set; }
        [Required]
        public string Title { get; set; }
        [Required]
        public string Summary { get; set; }
        [Required]
        public string Body { get; set; }
        public List<Comment> Comments { get; set; }
        public List<Tag> Tags { get; set; }
        public DateTime CreationDateTime { get; set; }
        public DateTime UpdateDateTime { get; set; }
    
        public int ParentBlogId { get; set; }
    
        public virtual Blog ParentBlog { get; set; }
    }
    

    Or configure this using fluent API

       modelBuilder.Entity<BlogEntry>()
                .HasRequired(b => b.ParentBlog)
                .WithMany(b => b.BlogEntries)
                .WillCascadeOnDelete(true);
    
    0 讨论(0)
  • 2021-02-14 06:32

    Not sure what you are trying to do here, but you have one record so not sure why you are trying to loop. Here is my delete code:

    public ActionResult Delete(int id)
    {
        try {
            Products products = context.Products.Single(x => x.productId == id);
            return View(products);
        }
        catch (Exception ex)
        {
            ModelState.AddModelError("", ex.Message);
            CompileAndSendError(ex);
            return View(new Products());
        }
    }
    
    //
    // POST: /Products/Delete/5
    
    [HttpPost, ActionName("Delete")]
    public ActionResult DeleteConfirmed(int id)
    {
        try {
            Products products = context.Products.Single(x => x.productId == id);
            context.Products.Remove(products);
            context.SaveChanges();
            return RedirectToAction("Index");
        }
        catch (Exception ex)
        {
            ModelState.AddModelError("",ex.Message);
            CompileAndSendError(ex);
            return RedirectToAction("Index");
        }
    }
    
    0 讨论(0)
提交回复
热议问题