在EntityFramework(EF)中删除主从表记录

本文介绍了如何在Entity Framework中高效地进行数据库操作,包括删除主表及其级联子表记录的方法,以及删除子表记录时的状态设置技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

删除主表: 

如果要删除单个的Book对象,由于启用了级联删除,干掉一个Book,它所关联的所有BookReview也一并删除了。

(说的简单,如果用Attach方法或者Remove,加修改删除状态,只要使用之前加载的包含子表记录的对象是不行的)

先查询要删除的记录(因为有级联删除,所以不加载子表记录),然后再Remove,最后SaveChange即可;

删除子表:

如果想删除单个书评,如果使用DB_First方式,Visual Studio生成的实体对象集合其类型为ICollection<T>,实际上是一个普通的HashSet<T>集合对象,不具备跟踪对象状态的功能。因此,在删除单个对象时,需要显式设置其状态为EntityState.Deleted,否则,删除将失败:

 

using(var context=newEFModelFirstDbEntities())

 {

                Book book =context.Books.First();

                BookReview reviewToBeDelete = book.BookReviews.FirstOrDefault();

                context.Entry(reviewToBeDelete).State =EntityState.Deleted;

               book.BookReviews.Remove(reviewToBeDelete);

                context.SaveChanges();

 }

 

更简单的方式是直接从DbSet中移除,这是推荐的方式

 

Book book = context.Books.First();

BookReview reviewToBeDelete =book.BookReviews.FirstOrDefault();

context.BookReviews.Remove(reviewToBeDelete);

context.SaveChanges();

摘自金老师博客:http://blog.youkuaiyun.com/bitfan/article/details/13023223

转载于:https://www.cnblogs.com/sjqq/p/8424407.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值