Linq操作与外键的联系

来源:互联网 发布:工厂方法模式 java 编辑:程序博客网 时间:2024/05/17 07:52

 

一个饭局有多个参与者

 

这是一些基本方法

   

    public class DinnerRepository:IDinnerRepository
    {
        NerdDinnerDataContext dc = new NerdDinnerDataContext();

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

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

        public Dinners GetDinner(int id)
        {
            return dc.Dinners.Where(d => d.DinnerID == id).FirstOrDefault();
        }

        public void Add(Dinners d)
        {
            dc.Dinners.InsertOnSubmit(d);
        }

 

        // 一个饭局有多个参与者

        // 删掉饭局,就要删掉参与者

        public void Delete(Dinners d)
       {
            // 删除与之为外键的信息
            dc.RSVP.DeleteAllOnSubmit(d.RSVP);
            dc.Dinners.DeleteOnSubmit(d);
       }

        public void Save()
        {
            dc.SubmitChanges();
        }
    }

 

那么我取消一个饭局,那么即必须把RSVP表与之相关的参与者也要删掉,那么linq提供了一个方便的方法

 

        public void Delete(Dinners d)
        {
            // 删除与之为外键的信息
            dc.RSVP.DeleteAllOnSubmit(d.RSVP);
            dc.Dinners.DeleteOnSubmit(d);
        }

 

 

下面的示例代码首先检索一个 dinner 对象,然后添加一个 RSVP 对象。这里,使用 Dinner 对象的 RSVPs
集合对象。当调用 Resposity 对象的 Save()方法时,一条新的记录添加 RSVP表中。

 

DinnerRepository dinnerRepository = new DinnerRepository(); 
Dinner dinner = dinnerRepository.GetDinner(5); 
 
RSVP myRSVP = new RSVP();
myRSVP.AttendeeName = "ScottGu"; 
dinner.RSVP.Add(myRSVP); 

dinnerRepository.Save();