簡體   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