我有一个实体Person
,它有一个相关的实体Hobby
。这是一种多对多的关系,一个人可以有多个爱好,而一个爱好可以与很多人相关联。我想创建一个 ViewModel
,允许添加新的爱好和/或从给定的 Person 实体中删除现有的爱好。
下面的代码可以工作,但我认为它的效率相当低。
var newHobbies = new List<Hobby>();
foreach (Hobby hobby in vm.Hobbies)
{
var originalHobby = db.Hobbies.Find(hobby.HobbyID);
newHobbies.Add(originalHobby);
}
originalPerson.Hobbies = newHobbies;
我更喜欢做这样的事情:
var newHobbies = db.Hobbies.Where(x => vm.Hobbies.All(y => x.HobbyID == y.HobbyID)).ToList();
originalPerson.Hobbies = newHobbies;
但是我收到错误:
Only primitive types or enumeration types are supported in this context.
如何在不多次去数据库的情况下更新相关数据?
最佳答案
为了避免这种异常,您可以首先从 vm.Hobbies
集合中选择 Id,然后过滤您需要的爱好:
var Ids=vm.Hobbies.Select(x=>x.HobbyID);
var newHobbies = db.Hobbies.Where(x => Ids.Contains(x.HobbyID)).ToList();
// another option could be: db.Hobbies.Where(x => Ids.Any(id=>id==x.HobbyID)).ToList();
originalPerson.Hobbies = newHobbies;
关于c# - 如何使用 Entity Framework 6更新相关数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31753996/