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

标签 c# asp.net-mvc entity-framework entity-framework-6

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

相关文章:

c# - 访问当前的 RouteContext

c# - MVC EF - System.Data.Entity.Infrastruct.DbUpdateException

c# - ASP.NET Core Razor 页面 |部分 View 可以有页面模型吗

entity-framework - EF Core Second level ThenInclude misworks

c# - 如何将 Entity Framework 类属性标记为 'Obsolete'

c# - 有没有办法直接获取目录结构并将其解析为C#中的Json?

c# - 文件 IO 的单元测试方法

c# - 在 SQL Server 中使用 Entity Framework 核心 3.1 时指定列类型

javascript - GoogleChart 无法在 MVC 中工作

asp.net-mvc - 发布到 Controller ,如何从 URL 获取 id