问题标签 [graphdiff]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
497 浏览

entity-framework - GraphDiff 导致实体的 id 在 saveChanges() 之后没有被填充

当使用 graphDiff 创建记录时,调用 saveChanges() 后新的 id 不会填充回实体中。它已在此处登录 github 存储库 - https://github.com/refactorthis/GraphDiff/issues/144但该存储库似乎不再那么活跃,因此希望这里的某个人对如何让这个工作。

它应该如何工作,但是qualification.Id 对于创建始终为0。对于更新,它是正确的 ID。

我目前的工作是不使用图形差异进行创建,但这并不理想。

谢谢

0 投票
0 回答
249 浏览

expression-trees - GraphDiff:“级联”拥有的集合

我正在尝试使用GraphDiff(NuGet 中的最新可用版本)来处理我认为不是非常困难的实体模型。考虑这样的模型:

如果我正在更新 A 的实例(称之为aEntity),我可以这样做:

现在我有时也想独立更新B。

所以我想我可以通过引入一个属性来“级联”这些更改,如下所示:

...然后在两种情况下都使用它,如下所示:

单独更新 B 可以正常工作,但更新 A 会在表达式域中失败:

有没有办法在 GraphDiff 中共享映射?

0 投票
2 回答
945 浏览

c# - 使用 graphdiff 的条件映射

我有以下实体DbContext

在此处输入图像描述

有时我想更新a图表:

我想a用它的更新(Bs更新,,,C太)使用:DEgraphdiff

这会更新A, Bs, Cs, Ds,但不会更新Es。

所以我认为,我需要定义一个条件映射graphdiff来更新Es,例如:

有什么办法可以完成这项工作吗?

0 投票
1 回答
16865 浏览

c# - 无法更改关系,因为一个或多个外键属性不可为空

在使用 EF 更新期间出现以下错误:

操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

有什么通用方法可以找到哪些外键属性导致上述错误?

[更新]

对于以下代码导致上述错误的一种情况(我在断开连接的环境中工作,所以我曾经graphdiff更新我的对象图),当它想要运行时_uow.Commit();

0 投票
1 回答
510 浏览

c# - 何时禁用代理生成并使用 AsNoTracking?

在我的 WebApi 项目中,我使用 EF6,遵循 Uow 和通用存储库模式,并且我还将我的模型映射到 dto,反之亦然。

目前我在创建时设置了以下内容dbContext

AsNoTracking从数据库中获取数据时我也会使用。

更新数据库时,我在处理小实体(即没有关系)时直接使用 dbContext 来附加实体。我将 GraphDiff 用于复杂实体(即具有关系)。

当启用代理和跟踪,甚至禁用它们时,我注意到发送到数据库的 SQL 语句包括所有表的列,而不仅仅是那些实际更改的列。

但是,GraphDiff 在将更改保存到数据库之前再次加载实体。本例中的 SQL 语句还包含所有列。这是正确的行为吗?

那么,在我的场景中,在处理分离实体时禁用代理和跟踪是否安全?

0 投票
3 回答
420 浏览

c# - 无法更改关系,因为一个或多个外键属性在保存时不可为空

我使用GraphDiff更新分离的对象图,并且在保存父对象及其子对象时出现上述异常。

模型和映射是:

对于插入和更新,我的存储库中有以下方法:

我执行以下操作:

  1. 添加一个新组,保存并重新加载
  2. 将用户添加到组,保存并重新加载
  3. 添加第二个用户,保存并重新加载
  4. 添加第三个用户,尝试保存 -> 抛出异常

在调试时,添加的用户实体的状态始终是分离的,并且对于新实体,两者GroupIdId都设置为 0。添加的前 2 个用户已成功保存。但是,在第三个中,抛出异常。

如果,我总是使用相同的保存方法,为什么它并不总是有效?这是一个EFGraphDiff问题,有没有办法解决这个问题?

SO和其他地方的大多数问题和相关答案都涉及删除子实体的情况。在我的特定情况下,情况并非如此。

0 投票
1 回答
360 浏览

c# - 使用 GraphDiff 删除拥有的实体 2 级深度

我在我的 MVC 项目中首先使用实体​​框架代码(版本 6)和 GraphDiff。

这是一些映射数据库中某些表的实体。

当我创建CommunicationPlan具有许多CommunicationTopics 的ContributingMembers 并保存聚合 rootCommunicationPlan时,GraphDiff 将创建所有记录并将它们关联到数据库中。(正如我想要的那样)

问题
当我尝试CommunicationTopic从现有中删除其中一个CommunicationPlan主题时,从数据库中删除了该主题(根据我的需要),但是与ContributingMember该主题相关的 sCommunicationTopic并未从数据库中删除,只是它们的外键值设置为 null ,并且它们驻留在数据库中。

当我配置的外键ContributingMember使其不接受空值时,我收到以下异常

操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

问题如何配置实体以使 GraphDiffContributingMember在其父级删除时删除记录CommunicationTopic

0 投票
0 回答
175 浏览

c# - 将不同的子对象添加到拥有的集合时与 GraphDiff 的并发性

为了让事情不太复杂,我不会为这个问题使用我自己的实体模型,而是使用原始 GraphDiff-Blog-Post中的模型其中有一个公司实体有多个联系人。为了说明我的问题,我认为这已经足够了。

所以基本上我的代码与graphdiff示例中的代码相同,效果很好:

问题是当试图在程序的 2 个不同实例上向同一公司添加新联系人时。例如,实例 1 保存了一个新的联系人 A,然后实例 2 保存了一个新的联系人 B。实例 1 中的图表在数据库中更新得很好,但实例 2 中的图表覆盖了实例 1 所做的所有更改并删除了新创建的联系人 A。

有没有办法用 Graphdiff 解决这个问题?也许我需要进行 2 个独立更新(一个用于公司,一个用于联系人),但首先使用 GraphDiff 已经没有多大意义了。还考虑过在更新图表之前做一个差异,但这似乎也有点矫枉过正。

或者,也许我只是对实体框架没有经验,以查看简单的解决方案:)

任何帮助表示赞赏!

干杯,迈克尔

0 投票
0 回答
70 浏览

entity-framework - GraphDiff:重新排列对象层次结构中的子项并保存更新的详细信息

我使用 GraphDiff 来保存代表以下数据模型的分离对象层次结构,

项目->课程->模块->主题。

问题是当我尝试重新排序对象层次结构时,

我已将模块 B 的 course_id 更新为 Course A id 并使用 graphdiff 将对象层次结构保存到数据库,这导致数据丢失(例如,保存后从数据库中删除了主题 B)。这就是我使用 graphdiff 保存项目对象的方式。

我想要的是在不丢失信息的情况下重新排列对象层次结构中的子项(对象树可以包含课程、模块和主题详细信息的更改)。此外,有人可以通过不同的例子提供关于 draphdiff 的好教程,因为我是新手 :)

谢谢你。

0 投票
0 回答
84 浏览

c# - 来自 GraphDiff 的 UpdateGraph 引发不完整的 DbUpdateConcurrencyException

我正在使用 EF6 和 GraphDiff 2.0.1。当我保存过时的条目时,我想检查 DbUpdateConcurrencyException。当我在没有 UpdateGraph 的情况下执行此操作时:没问题,EF 会引发异常。

我使用此处描述的解决方案来实现这一点: EF not throwing DbUpdateConcurrencyException 尽管更新冲突

问题是:如果我在 EF 的 SaveChanges 之前使用 GraphDiff 的 UpdateGraph:UpdateGraph 会引发不完整的 DbUpdateConcurrencyException。实际上,异常不包含条目。

我很惊讶 UpdateGraph 引发了这个异常。据我说,UpdateGraph 更新连接的条目,但不保存。因此,它应该什么都不做,让 EF 来完成这项工作。

有没有办法避免 UpdateGraph 引发异常。至少,如果它提出一个完整的,它可能会很棒。