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