问题标签 [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 回答
335 浏览

entity-framework - GraphDiff 和 EF6.1 – 递归多对多关系

我在 GraphDiff 附加具有递归多对多关系的对象时遇到问题。我正在使用 GraphDiff 2.0.1 和实体框架 6.1.1。

该程序管理可以具有 0-n 个 RecipeLines 的食谱,其中包含指向另一个食谱的链接,该食谱是 ComponentRecipe,并且具有 RecipeLines 等等。

我将一个配方对象传递到具有 1 个配方行的存储库中,该行上的配方对象指向父级,而 ComponentRecipe 对象指向不同的配方。

当 GraphDiff 附加项目时,它返回的附加项目有 2 条配方行,它们都是相同的,并且 ComponentRecipe 指向与在自身上创建循环的配方相同的对象。

我不确定这是否是 GraphDiff 的问题,或者更可能是我的 EF 映射或 GraphDiff 映射有问题。任何帮助表示赞赏,如果您需要更多信息,请告诉我,我可以提供一个简单的程序来演示此问题。

领域模型

数据上下文

存储库

附加数据上下文日志

SaveChanges 上的数据上下文日志

0 投票
2 回答
1309 浏览

c# - 使用 GraphDiff 更新多对多关系会导致错误

我在我的应用程序中使用EF code first 6.1with.NET 4并且在我的模型中有以下类(我剪切了图表的其他不相关部分。例如Permission有其他导航): 在此处输入图像描述

我的业务逻辑适用于分离实体,因此我RefactorThis.GraphDiff 2.0.1.0用于执行更新。我想更新一个applicationUserInApplication对象,所以我从数据库中获取一个现有applicationUserInApplicationSecurityRoles 并将其作为 a 返回,View-Model然后更新它并将其映射回applicationUserInApplicationusing Automapper(在更新操作中,我只更改SecurityRolesa 的集合applicationUserInApplication,这些SecurityRoles 之前保存,我只选择它们),所以我定义了以下配置:

AppUserInApplication并在类中定义了以下映射AppUserInApplication_Mapping

在上面调用后UpdateGraph(),当我调用时_dbContext.SaveChange();出现以下错误:

EntityFramework.dll 中出现“System.InvalidOperationException”类型的未处理异常附加信息:操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

[更新]

我也尝试了以下映射

但是我得到了同样的错误。

有谁知道问题出在哪里?

[更新]

我上传了我的模型的简化版本,您可以从https://www.dropbox.com/s/i9dvrb6ebd5wo7h/GraphdiffTest.rar?dl=0获取

0 投票
1 回答
132 浏览

c# - 如何组合两个表达式树体?

如果我有:

我想将它们组合成:

有没有办法做到这一点?

我还希望能够结合:

和:

成为:

有没有办法做到这一点?

我希望这些是相当简单的要求,但我发现很难掌握这些术语。

一些背景:

我正在使用https://github.com/refactorthis/GraphDiff来支持合并实体以进行更新。问题是它期望一个描述实体关系的表达式树被更新,例如。

我的需要是一个通用的解决方案,所以我需要使用反射检查我的实体类型的各种一对一、一对多和多对多关系,并将它们转换为表达式树。

对我的具体问题或一般帮助的任何帮助将不胜感激。

0 投票
1 回答
764 浏览

entity-framework - Graphdiff 正在删除实体

我有以下实体:

在我的服务方法中,当我尝试以下操作时,它会从数据库中删除不在配置文件功能列表中的功能对象:

有什么想法吗?
谢谢!

0 投票
1 回答
69 浏览

entity-framework - 在三个表上使用 GraphDiff

我有三张桌子

上下文:

当前代码:

给出这个错误:

不支持更新映射中使用的方法

有什么线索吗?

感谢和问候。

0 投票
1 回答
320 浏览

entity-framework - 具有自引用实体的 UpdateGraph

我正在使用GraphDiff和 EF 来更新从 REST 服务获取的断开连接的对象的状态。

从现在开始它工作得很好,但我遇到了自引用实体的问题。

实体:

UpdateGraph 调用:

好吧,最后一个图形调用仅更新 1 级递归性。无论递归有多深,我将如何更新?

0 投票
1 回答
411 浏览

c# - 使用 graphdiff 和实体框架设置与继承对象的外键的关联

我在更新从另一个类继承的外键上的值时遇到问题。我正在使用 Entity Framework 中的分离对象,所以我使用 graphdiff 来处理它。

我已经简化了代码以使其更易于阅读

项目类:

活动类:

冲浪活动类:

使用 graphdiff 的更新上下文:

我只能在 Activity 中关联 Company 属性,但不能关联 SurfingActivity 的天气。当我传递 SurfingActivity 的值时,Id、Name、Company 和 Comment 是否会保存在 Activity 表和 SurfingActivity 表中,但不会保存在天气中。有没有人有任何建议如何解决这个问题而不必在 Project 上创建一个包含 surfingActivity 列表的新属性

0 投票
1 回答
1004 浏览

c# - 使用 GraphDiff 更新两个相关表中的数据

我有两个表,Order 和 OrderItems

Order 表有一个 OrderId 列作为主键 OrderItems 也有这个列作为外键。

对于给定的订单,如果 OrderId 为 1 并且它有两个项目,则 OrderItems 表将有两行,每行的 OrderID 为 1。

使用 EF,我用这两个表创建了一个上下文。

现在 Order 表和 OrderItems 表都有一个 Status 列。

使用 GraphDiff 我想像这样更新这个值:

这给出了以下异常:

有什么线索吗?

提前致谢。

0 投票
0 回答
352 浏览

c# - GraphDiff 重复返回的实体

我正在使用 GraphDiff 来更新复杂的对象图。我的主要实体有多个可以创建、更新或删除的子实体(graphDiff 中的 OwnedCollections)。因此,在 GraphDiff 中,当实体更新时,正在创建实体的不同副本,您必须获取此副本才能获取新创建实体的 ID 等。我遇到了以下问题:当我将实体添加到child 集合,返回的“母亲”实体有两次相同的孩子。我已经下载了代码,CollectionGraphNode 中的以下代码似乎导致了这个问题:

我知道我的问题非常具体,但 GraphDiff 是我最后希望我能够以一种简洁的方式更新我的对象。我在 EF 中不是那么好,我试图了解上述两行代码如何在列表中两次添加我的实体。我的子实体引用了父实体,这会导致额外的添加吗?有没有人遇到过类似的问题,您是如何解决的?

0 投票
1 回答
359 浏览

entity-framework-6.1 - 首次更新时优化 GraphDiff 性能(后续更新很快)

我正在从事一个具有非常复杂实体的项目。对象图在具有两个级别的树中包含大约 30 个对象(有子项的子项)。

该实体在浏览器中进行管理,并作为 Json 发送到 Web API 端点。端点将 JSON 序列化为复杂实体,然后存储库使用 GraphDiff 保存实体。

在第一次保存时,UpdateGraph 调用大约需要 12 秒,在同一实体的后续调用中,需要毫秒。

我假设图形在 EF DbContext 中按实体缓存。

有什么办法可以优化第一次通话?我们在使用 GraphDiff 时只有几个场景,也许有办法准备应用程序中使用的图形。

感谢您的帮助。