[英]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.