gpt4 book ai didi

c# - 如何使用 Entity Framework 更新相关数据 6

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:23 28 4
gpt4 key购买 nike

我有一个实体 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com