繁体   English   中英

实体框架:更新相关表的最佳方法

[英]Entity Framework: Best way to update related table

我使用EF具有以下结构:

一个“事件”有很多“客人”

假设Event.Guests有4个Guest元素,id为1,2,3,4的我想更新Event.Guests使其id为3,4,5的guest(如果Guest 5不存在,我想创造它)。

从Event中删除现有来宾并添加新来宾的最有效方法是什么?

这就是我现在正在做的:

     var newGuests = new List<Guest>();
     var existingGuests = @event.Guests.ToList();

     // GetNewGuestsIds will return the new guests list (3,4,5)
     foreach (var guestId in GetNewGuestsIds())
     {
        Guest guest = existingGuests.FirstOrDefault(eg => eg.Id == guestId);

        if (guest == null)
        {
           guest = db.Guests.CreateObject();
           // fill guest data here
        }

        newGuests.Add(guest);
     }

     foreach (var existingGuest in existingGuests)
     {
        // Remove the existing element from the list to add
        var removed = newGuests.RemoveAll(g => g.Id == existingGuest.Id);
        if (removed == 0) // The existing host is not on the list to add, delete it
        {
           @event.EventHosts.Remove(existingGuest);
        }
     }

     foreach (var guest in newGuests)
     {
        @event.Guests.Add(guest);
     }

但是我认为这可能会有所改善...我只是不知道该怎么做。

谢谢!

经过一番思考,我得出了这个结果,看起来似乎好多了:

 var existingGuests = @event.Guests.ToList();

 // GetNewGuestsIds will return the new guests list (3,4,5)
 foreach (var guestId in GetNewGuestsIds())
 {
    if (existingGuests.RemoveAll(g => g.Id == guestId) == 0)
    {
       guest = db.Guests.CreateObject();
       // fill guest data here
       @event.Guests.AddObject(guest);
    }
 }

 existingGuests.ForEach(g => @event.Guests.Remove(g));

我希望这可以帮助其他人。

暂无
暂无

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

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