更新实体框架中的嵌套对象

2023-12-25

最近我发现 EF 不更新嵌套对象。 几天来我试图弄清楚如何做到这一点,但不幸的是我遇到了这个问题。

我有对象

public class ProjectEntity : AuditableEntity<int>
{

    public string CustumerCompany { get; set; }
    public string CustomerRepresentative { get; set; }

    public string ProjectTitle { get; set; }
    public string WwsNumber { get; set; }

    [ForeignKey("ParentProjectId")]
    public virtual ProjectEntity ParentProject { get; set; }

    public int? ParentProjectId { get; set; }

    public virtual ICollection<ProjectServicesEntity> Service { get; set; }
}

然后是服务对象

public class ProjectServicesEntity : AuditableEntity<int>
{
    /// <summary>
    /// Service Number
    /// </summary>
    public int Number { get; set; }
    /// <summary>
    /// Service Name
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    /// Positions
    /// </summary>
    public virtual ICollection<ProjectPositionsEntity> Positions { get; set; }

    [ForeignKey("ProjectId")]
    public virtual ProjectEntity Project { get; set; }

    public int ProjectId { get; set; }
}

和 Positions 对象:

public class ProjectPositionsEntity : AuditableEntity<int>
{
    /// <summary>
    /// Position number
    /// </summary>
    public int Number { get; set; }

    /// <summary>
    /// Position Name
    /// </summary>
    public string Name { get; set; }

    /// <summary>
    /// Organization Unit for position
    /// </summary>
    public virtual ICollection<ProjectsOutsourcedPositionEntity> OrganizationUnit { get; set; }
    /// <summary>
    /// Represents if position is outsourced
    /// </summary>
    public bool OutSource { get; set; }
    /// <summary>
    /// Comments for position
    /// </summary>
    public string Remarks { get; set; }

    [ForeignKey("ServiceId")]
    public virtual ProjectServicesEntity Service { get; set; }

    public int ServiceId { get; set; }

}}

还有我的更新方法:

public void Update(T entity)
    {

            DbContext.Entry(entity).State = EntityState.Modified;
            DbContext.SaveChanges();
}

当页面显示所有数据时,当我尝试编辑服务或位置中的某些数据时,它不会更新。 有人遇到过这样的问题吗?

我看到的每个例子都只有 1 层深度的嵌套对象,但正如你所看到的,我的对象有 2 层嵌套。


所以我想出了如何让这项工作成功。 在特定的存储库类中我做了一些foreach将 EntityState 设置为已修改的循环。根据我们的业务规则,项目需要具有服务和职位,而职位的 OrganizationUnit 是可选的,因此我检查它是否不为空。 这是我的解决方案:

DbContext.Entry(entity).State = EntityState.Modified;
            foreach (var service in entity.Service)
            {
                DbContext.Entry(service).State = EntityState.Modified;
                foreach (var position in service.Positions)
                {
                    DbContext.Entry(position).State = EntityState.Modified;
                    if (position.OrganizationUnit == null) continue;
                    foreach (var organizationUnit in position.OrganizationUnit)
                    {
                        DbContext.Entry(organizationUnit).State = EntityState.Modified;
                    }
                }
            }
            DbContext.SaveChanges();

现在,当我想在任何级别更新我的对象时,它都会在我的数据库中更新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更新实体框架中的嵌套对象 的相关文章

  • 使用实体框架时是否应该使用部分类作为业务层?

    我正在开发一个使用实体框架的项目 使用EF生成的类的部分类作为业务层可以吗 我开始认为这就是 EF 的用途 我尝试使用 DTO 模式 很快意识到我只是创建了一堆映射类 这重复了我的工作 而且还导致更多的维护工作和额外的层 我想使用自我跟踪实
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 在 AngularJS 中访问 Spring MVC 模型对象

    我有一个使用 JAVA Spring MVC 后端 和 AngularJS 前端 JSP 用于视图 和 MySQL DB 构建的 Spring MVC Web 表单 用户可以在填写表格后提交表格并搜索现有条目 提交条目后 还会向用户发送一封
  • Fire and no-wait (without do!) vs Fire and wait (do!) 有巨大的性能差异吗?

    以下代码运行大约需要 20 秒 然而 取消注释后不到一秒钟do 为什么会有这么大的差异呢 Update 使用时需要9秒ag Add 我已经更新了代码 open FSharpx Control let test let ag new Bloc
  • kafka 上的无限期日志保留

    我正在使用 kafka 进行事件溯源 我意识到我们仍然需要配置日志保留时间 即log retention hours 如果我想无限期保留所有消息 最好使用什么值 示例配置为log retention bytes设置为 1 我可以在中也使用
  • TabWidget在Android底层不稳定?为什么?

    我将 tabWidget 设置在底部 当我想编辑编辑文本时 键盘会升起 但选项卡小部件位于键盘上方 为了支持多屏幕 我设置了 android layout weight 1 0 之后 我遇到了这个问题 我在下面添加了布局代码 有什么想法可以
  • Mysql 密码已过期。无法连接

    我刚刚擦除了我的 Mac 并重新安装了 El Capitan 我现在很难连接到Mysql 完成 Web 服务器设置过程后 我创建了一个简单的 PHP 测试文件 当我运行它时 我收到此错误 Warning mysqli mysqli HY00
  • 如何在 PyQt4 中杀死单次 QtCore.QTimer?

    因此 在我的应用程序中 我创建了一个QtCore QTimer对象 然后调用singleShot方法在 60 秒后调用一个函数 现在 在任何给定的时间点 如果我需要致电singleShot再次使用该方法并防止以前的singleShot方法生
  • 文件 MD5 校验和

    In 这个问题 https stackoverflow com questions 392657 md5 hashing in delphi 2009提到了wcrypt2 我需要的只是计算文件的MD5 如果我可以计算它而不需要保存它那就完美
  • 中间件和 Blazor 组件的范围

    我正在开发服务器端 Blazor 应用程序 并遇到了有关范围服务的一些问题 为了简单起见 我使用默认的 Blazor 模板 带有计数器的模板 重新创建了我的问题 我有一个服务 CounterService 它将计数器初始化为 1 并公开该计
  • 无法设置经度从 -180 到 0 的 LatLngBounds

    当尝试设置新的 LatLngBounds 时 对于世界的西南四分之一 西南经度自动设置在世界的另一侧 导致 LatLngBounds 不一致 西南比东北更东 a new google maps LatLng 90 180 true a ln
  • 为什么 C#.net 中的表达式主体不能使用 int、double 或 bool 类型的属性?

    我有一个功能 private string GetPropertyName Expression
  • Xcode 无法解析依赖项 Firebase - GoogleAppMeasurement 与要求不匹配

    我是 Xcode 编码新手 我尝试在我的项目上安装 Firebase 但遇到一个错误 我不知道如何解决 我已遵循 Firebase 的所有说明 但仍然存在问题 首要问题 无法解析依赖关系 因为 GoogleAppMeasurement 没有
  • PluginApplicationException:无法应用插件类“FlutterPlugin”

    我遇到了奇怪的错误 升级 Android Studio 后 我创建了一个Android项目 运行成功 然后我尝试导入Flutter Module到这个Android项目 我有这些例外 块引用 原因 org gradle api intern
  • Qt 中的 ODBC 驱动程序使用

    我想使用读取和写入mdb文件 Ms Access 文件 我是全新使用的ODBC in Qt 那么有人可以帮助我知道我是否需要下载驱动程序 如果是的话我可以从哪里下载 如果您了解连接性 那么我们将提供任何帮助 如果您需要使用 Qt 访问 MS
  • scanf 并将 char 保留为整数

    我就是无法理解 Char 是整数 对吗 所以我可以做 int var scanf d var I 65 printf c var o A 为什么这样做是错误的 char var scanf d var I A printf d var O
  • eslint-config-airbnb 扩展名“.js”的文件中不允许使用 JSX

    我已经安装了eslint config airbnb https github com airbnb javascript tree master packages eslint config airbnb应该为 React 预先配置 ES
  • 如何在 Codesys v3 中创建指向函数的指针

    你能给我一个例子来说明如何在我的库中声明函数指针吗 如何将函数指针传递给外部库 TL DR 在 CoDeSys v3 中可以使用 Totes 而且非常简单 在 CoDeSys 中 函数 实际上是存储在函数表中的函数指针 在 CodeSys
  • NSMutableArray 无法添加到

    我以前也遇到过这样的问题 但没有得到满意的答案 我有一个视图控制器 它有一个名为 counties 的属性 它是一个 NSMutableArray 我将深入导航屏幕 找到有关选择县进行地理搜索的视图 因此 搜索页面会深入到 选择县 页面 I
  • 获取应用程序开发人员名称[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想获取应用程序开发人员的名称 请有人告诉我如何得到这个 我尝试过 但只能获取已安装的应用程序及其图标 我想显示开发者名称 要获取已安
  • 如何在 DB2 上的多个表上使用 WHERE 条件执行安全的“SELECT FOR UPDATE”?

    Problem 在 DB2 版本 9 5 上的 SQL 语句 SELECT o Id FROM Table1 o Table2 x WHERE FOR UPDATE WITH RR 给我错误消息SQLSTATE 42829 不允许使用 FO
  • 更新实体框架中的嵌套对象

    最近我发现 EF 不更新嵌套对象 几天来我试图弄清楚如何做到这一点 但不幸的是我遇到了这个问题 我有对象 public class ProjectEntity AuditableEntity