删除主表:
如果要删除单个的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.csdn.net/bitfan/article/details/13023223