实体框架核心更新多对多

2023-12-05

我们正在将现有的 MVC6 EF6 应用程序移植到 Core。

EF Core 中有没有简单的方法来更新多对多关系?

我在 EF6 中清除列表并用新数据覆盖它的旧代码不再有效。

var model = await _db.Products.FindAsync(vm.Product.ProductId);
model.Colors.Clear();
model.Colors =  _db.Colors.Where(x => 
vm.ColorsSelected.Contains(x.ColorId)).ToList();

这对你有用。

创建一个类以建立以下关系:

public class ColorProduct
{
    public int ProductId { get; set; }
    public int ColorId { get; set; }

    public Color Color { get; set; }
    public Product Product { get; set; }
}

Add a ColorProduct收藏到你的Product and Color课程:

 public ICollection<ColorProduct> ColorProducts { get; set; }

然后使用我制作的这个扩展来删除未选择的内容并将新选择的内容添加到列表中:

public static void TryUpdateManyToMany<T, TKey>(this DbContext db, IEnumerable<T> currentItems, IEnumerable<T> newItems, Func<T, TKey> getKey) where T : class
{
    db.Set<T>().RemoveRange(currentItems.Except(newItems, getKey));
    db.Set<T>().AddRange(newItems.Except(currentItems, getKey));
}

public static IEnumerable<T> Except<T, TKey>(this IEnumerable<T> items, IEnumerable<T> other, Func<T, TKey> getKeyFunc)
{
    return items
        .GroupJoin(other, getKeyFunc, getKeyFunc, (item, tempItems) => new { item, tempItems })
        .SelectMany(t => t.tempItems.DefaultIfEmpty(), (t, temp) => new { t, temp })
        .Where(t => ReferenceEquals(null, t.temp) || t.temp.Equals(default(T)))
        .Select(t => t.t.item);
}

使用它看起来像这样:

var model = _db.Products
    .Include(x => x.ColorProducts)
    .FirstOrDefault(x => x.ProductId == vm.Product.ProductId);

_db.TryUpdateManyToMany(model.ColorProducts, vm.ColorsSelected
    .Select(x => new ColorProduct
    {
        ColorId = x,
        ProductId = vm.Product.ProductId
    }), x => x.ColorId);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架核心更新多对多 的相关文章

  • 在project.json .Net Core中本地管理nuget

    我不想依赖 nuget 服务来下载依赖项 我想在我的 Net Core 应用程序中本地下载并使用 nuget 包 是否可以 方法与之前相同 打开您的NuGet config https docs nuget org consume nuge
  • 如何根据 ASP.NET VNEXT MVC6 中给出的路径进行虚拟路由/重定向?

    我有一个网站 它在不同的路径上公开多个 API 每个 API 由特定于应用程序部分的控制器处理 例如example com Api Controller Action param1 stuff 其中控制器发生变化 但操作保持相当一致 我有几
  • 带有自定义鉴别器的 EntityFramework Code First 继承

    我正在尝试在 EntityFramework Code First 中映射以下继承 public class Member public string ProjectName get set public string AssemblyNa
  • 如何在 ASP.NET Core Web API 中传递 int 数组

    我有这个 Web API 方法 Route api controller ApiController public class SubjectsController ControllerBase HttpGet children publi
  • 对预检请求的响应未通过访问控制检查:响应中“Access-Control-Allow-Credentials”标头的值为“”

    我正在 Angular 6 和 asp net core 上使用 SignalR 功能 但不断收到此错误对预检请求的响应未通过访问控制检查 响应中 Access Control Allow Credentials 标头的值为 当请求的凭据模
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • EF 4.1 加载过滤的子集合不适用于多对多

    我一直在看显式加载相关实体时应用过滤器 http blogs msdn com b adonet archive 2011 01 31 using dbcontext in ef feature ctp5 part 6 loading re
  • ASP.NET Core 基于自定义策略的授权 - 不清楚

    好的 ASP NET Core 中基于自定义策略的授权 我有点理解这个新身份框架的想法 但仍然不是 100 清楚你可以用它实现什么 假设我们在 HomeController 中有一个名为 List 的 Action 此操作将查询并显示数据库
  • IClaimsTransformation 未被调用

    我正在开发 ASP NET Core Web 应用程序 NET 5 0 这是一个 Intranet 应用程序 因此我使用 Windows 身份验证 对于授权 我使用 AspNetCore Identity 中的自定义角色 出于各种原因不想使
  • 返回带有列表对象的列表对象

    我有三个表 汽车品牌 汽车型号 和 CarsandModel 我有 Carsand 模型表 因为一个模型可以由多个制造商构建 我想返回包含汽车型号列表的汽车品牌列表 我现在的长篇大论不是过滤汽车型号的汽车制造商列表 我尝试添加一个 wher
  • 包管理器控制台中缺少文件错误

    我们的开发团队的一些成员在打开包管理器控制台时开始看到以下错误 它完全阻止我们运行实体框架命令 我们已经检查过并且提到的文件确实存在 GetEvent types ps1xml Diagnostics Format ps1xml Diagn
  • 提供者未返回 ProviderManifest 实例

    当我想配置我的数据源 EntityDataSource 1 并将实体数据模型自动生成的连接字符串分配给它时 我收到错误 无法加载连接字符串中指定的元数据 请考虑重建 Web 项目以构建可能包含元数据的程序集 发生以下错误 提供程序未返回 P
  • 下载 .NET 3.5 的实体框架

    哪个版本的实体框架 EF 我可以用在 NET 3 5我可以在哪里下载这个旧版本 对于 Net 3 5 您可以使用 EF v1 您是否尝试从以下位置下载 Microsoft NET Framework 3 5 Service Pack 1 h
  • C# 中处理 SQL 死锁的模式?

    我正在用 C 编写一个访问 SQL Server 2005 数据库的应用程序 该应用程序是数据库密集型的 即使我尝试优化所有访问 设置适当的索引等 我预计迟早会遇到死锁 我知道为什么会发生数据库死锁 但我怀疑我能否在某个时候发布不发生死锁的
  • 是什么原因导致 Linq 错误:此方法无法转换为存储表达式?

    我有一堆具有相同 select 语句的 Linq to Entity 方法 所以我想我会很聪明 并将其分离到它自己的方法中以减少冗余 但是当我尝试运行代码时 我得到了以下内容错误 该方法不能转化为 商店表达式 这是我创建的方法 public
  • 我应该对 ObjectContext 使用 using 关键字吗?

    我在这个网站或 CodeProject 的某个地方读到 好的规则是 如果某个类已经实现了 IDisposable 接口 那么您应该使用 using 关键字 因为使用翻译成 MSIL 的关键字会尝试 最终阻止如下内容 try some log
  • 关于实体框架上下文生命周期的问题

    我对 ASP NET MVC 应用程序中实体框架上下文的所需生命周期有一些疑问 让上下文在尽可能短的时间内保持活动状态不是最好的吗 考虑以下控制器操作 public ActionResult Index IEnumerable
  • 实体框架 - 有条件地包含相关实体

    我维护一个 API 根据对人员列表的请求 根据请求返回不同的结果集 例如 一些 API 客户端想要获取人员列表及其交互列表 其他 API 客户端则想要人员及其元数据列表 所有这些都可以在返回人员的 API 方法请求中指定 这似乎不起作用 u
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow

随机推荐

  • 帮助计算分层数据集中的复数总和

    我有一个有趣的 SQL 问题 我有一个用于制作物料清单的零件分层表 与此类似 ASSEMBLY parent part id part id quantity 我通过如下查询获取此结构的层次结构 SELECT level part id q
  • 组合unicode字符串

    我正在尝试创建一个像这样的字符串const str u33d rotation Where u33是 3 的代码 这只是一个简单的测试用例 然而这给了我 SyntaxError 格式错误的 Unicode 字符转义序列 有没有办法将 uni
  • 如何更改 ListView 项目的字体? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我有一个问题 我想为我的列表视图创建自定义设计 但我不知道该怎么做 我使用列表视图中的 sql 数据库 哈哈 对不起 我不知道该怎么说 因为我是德国人 所以顺便说一句 对不起我的英语
  • Dart 将 IEEE-11073 32 位 FLOAT 转换为简单双精度

    I don t have much experience working with these low level bytes and numbers so I ve come here for help I m connecting to
  • 有没有办法在 Windows 8 Metro 应用程序中获得推送滚动功能?

    在 Windows 8 Consumer Preview 中 将鼠标向开始屏幕的左边缘或右边缘移动会导致内容滚动 标准控件 以及当前发布的预览应用程序 似乎不支持这一点 有办法让这项工作发挥作用吗 我在今年的北美 TechEd 会议上提出了
  • 使用 AVFoundation 叠加两个视频

    我试图叠加两个视频 前景视频有些 Alpha 透明 我一直在关注苹果文档也本教程 每当我尝试播放两个相同的视频时my code它不会崩溃 但是 当我尝试向其提供两个不同的视频时 我收到此错误 VideoMaskingUtils export
  • 使用 OpenXML 将数据表插入 Excel

    我有一个数据表 根据用户的选择 将生成具有任意数量的行和列的动态数据表 我目前正在使用 OpenXml 来操作所述电子表格 我将如何插入数据表 Thanks Stu 我找到了一些代码 我可以对其进行修改以满足我的需要 希望有人觉得这很有用
  • 使用 Z3 命令行工具和超时查找次优解决方案(迄今为止最佳解决方案)

    I saw a post其中谈到了如何使用 Z3 的 python API 来获得最小化问题的次优解决方案 我有一个 MAXSMT 问题 我想知道如何使用 Z3 命令行工具在指定超时时找到次优解决方案 正在使用 t timeout单独的选项
  • 为什么 Airflow 更改 start_date 而不重命名 dag?

    我是一名数据工程师 经常使用气流 使用新的开始日期重新部署 dags 时 最佳实践如下所示here 不要更改 start date 间隔 当 DAG 运行时 调度程序数据库包含该 DAG 运行的实例 如果更改 start date 或间隔并
  • 如何模拟 moment.utc() 进行单元测试?

    我刚刚开始使用 Node 现在正在编写一些单元测试 对于前几个函数 我可以正常工作 但现在我发现了一个函数 其中包括moment utc 在里面 我的函数的简化版本如下所示 function calculate x positions ri
  • Android 应用内商品未出现在 Play 商店或应用中

    我创建了一个包含应用内产品的应用程序 我已在我的应用程序中添加了许可密钥和计费权限 并在开发者控制台中创建了应用程序内产品 这些产品处于活动状态 我已经构建了一个已发布的 alpha 版本 现在我可以使用其中一个测试帐户在 Google P
  • 如何使用 nltk.Regexp.parser() 解析自定义标签

    我的问题与这个未回答的问题类似 使用自定义 POS 标签进行 NLTK 分块 但我得到的错误是不同的 我正在尝试解析一个我添加了自己的域特定标签的句子 例如 u greatest P u internet NN u ever A u u a
  • Java,在多维数组中存储混合数据类型的最简单方法?

    我有一个包含一些字符串和整数的文件 我希望将其存储在二维 数组 中 这样做的最佳方法是什么 我已经有一段时间没有使用 Java 了 并且一直在使用 VBA 其中没有数据类型 所以我有点生疏了 如果必须的话 将其设为对象的二维数组 更好的解决
  • 通过 Python 请求重用 Django 中的连接

    正确的重复利用方式是怎样的Python 请求Django 中跨多个 HTTP 请求的连接 这就是我目前正在做的事情 import requests def do request data return requests get http f
  • Pandas:将 DataFrame 对象存储在另一个 DataFrame 中,即嵌套 DataFrame

    我想存储一个DataFrame对象作为行的列的值 这是我想要实现的目标的简化类比 gt gt gt df pd DataFrame 1 2 3 2 4 6 columns list DEF gt gt gt df 166 D E F 0 1
  • 在 ASP.NET 和 IIS7 中记录原始和压缩的 HTTP 响应

    沿着这个问题我想创建一个 HttpModule 来为我们进行一些请求和响应的自定义日志记录 使用该问题最流行的答案中的代码 我已经启动并运行了一个确实有效的 HttpModule class PortalTrafficModule IHtt
  • Linq to SQL - 多对多映射

    在我的项目中 我有 Player PlayerID 和数据 表 Games 表 GameID 名称 并且我制作了一个多对多表 PlayerGames PlayerID GameID 我创建了外键关系 PlayerID 和 GameID 是其
  • 如何创建自动安装 .Net Framework 4.5 的引导程序

    我正在使用InstallShield 2013 LE 并且我希望做一些类似于SQL CE 4 0的事情作为InstallShield先决条件 只是 我想安装 Net Framework 4 5 如果计算机上尚未安装 我有框架所需的文件 但
  • 转到仅显示公共成员的类的定义

    当我在 Visual Studio 中右键单击一个类 它是第三方程序集的一部分 不是我编写的代码 并选择 转到定义 时 我可以看到该类的所有方法 属性等 我注意到所有这些都是public and no private显示 或任何其他访问级别
  • 实体框架核心更新多对多

    我们正在将现有的 MVC6 EF6 应用程序移植到 Core EF Core 中有没有简单的方法来更新多对多关系 我在 EF6 中清除列表并用新数据覆盖它的旧代码不再有效 var model await db Products FindAs