简体   繁体   English

在EF中,通过删除子行克隆中首先引用它的子行来删除父行是否有效?

[英]In EF, is it efficient to delete a parent row by deleting the child rows referencing it first through the child row clones?

        public void Delete(Dinner dinner)
        {
            List<RSVP> rsvps = dinner.RSVPs.ToList();// This clone looks inefficient.

            foreach (RSVP rsvp in rsvps)
                entities.RSVPs.DeleteObject(rsvp);

            entities.Dinners.DeleteObject(dinner);
        }

替代文字

QUESTION: 题:

Deleting a parent row by deleting the child rows referencing it first through the child row clones looks inefficient. 通过删除子行克隆中首先引用该子行的子行来删除父行效率低下。

Duplicating the child rows will consume huge resources I think. 我认为复制子行会消耗大量资源。

If so, what is the better way? 如果是这样,更好的方法是什么?

EDIT 1: 编辑1:

namespace NerdDinner.Models
{
    public class DinnerRepository
    {
        private NerdDinnerEntities entities = new NerdDinnerEntities();

        public IQueryable<Dinner> FindAllDinners()
        {
            return entities.Dinners;
        }

        public IQueryable<Dinner> FindUpcomingDinners()
        {
            return from dinner in entities.Dinners
                   where dinner.EventDate > DateTime.Now
                   orderby dinner.EventDate
                   select dinner;
        }

        public Dinner GetDinnerByID(int DinnerID)
        {
            return entities.Dinners.FirstOrDefault(d => d.DinnerID == DinnerID);
        }

        public void Add(Dinner dinner)
        {
            entities.Dinners.AddObject(dinner);
        }

        public void Delete(Dinner dinner)
        {
            //List<RSVP> rsvps = dinner.RSVPs.ToList();

            //foreach (RSVP rsvp in dinner.RSVPs)
            //    entities.RSVPs.DeleteObject(rsvp);

            entities.Dinners.DeleteObject(dinner);
        }

        public void Save()
        {
            entities.SaveChanges();
        }
    }
}

Set the delete rule to cascade on the foreign key, then when you delete the dinner object the database will automatically remove all child records. 将删除规则设置为在外键上级联,然后在删除晚餐对象时,数据库将自动删除所有子记录。

Keep in mind, this probably won't be reflected down to EF so any objects already in memory will not be marked as deleted. 请记住,这可能不会反映到EF,因此内存中已经存在的任何对象都不会被标记为已删除。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM