问题标签 [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.
entity-framework - GraphDiff 导致实体的 id 在 saveChanges() 之后没有被填充
当使用 graphDiff 创建记录时,调用 saveChanges() 后新的 id 不会填充回实体中。它已在此处登录 github 存储库 - https://github.com/refactorthis/GraphDiff/issues/144但该存储库似乎不再那么活跃,因此希望这里的某个人对如何让这个工作。
它应该如何工作,但是qualification.Id 对于创建始终为0。对于更新,它是正确的 ID。
我目前的工作是不使用图形差异进行创建,但这并不理想。
谢谢
expression-trees - GraphDiff:“级联”拥有的集合
我正在尝试使用GraphDiff(NuGet 中的最新可用版本)来处理我认为不是非常困难的实体模型。考虑这样的模型:
如果我正在更新 A 的实例(称之为aEntity),我可以这样做:
现在我有时也想独立更新B。
所以我想我可以通过引入一个属性来“级联”这些更改,如下所示:
...然后在两种情况下都使用它,如下所示:
单独更新 B 可以正常工作,但更新 A 会在表达式域中失败:
有没有办法在 GraphDiff 中共享映射?
c# - 无法更改关系,因为一个或多个外键属性不可为空
在使用 EF 更新期间出现以下错误:
操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
有什么通用方法可以找到哪些外键属性导致上述错误?
[更新]
对于以下代码导致上述错误的一种情况(我在断开连接的环境中工作,所以我曾经graphdiff
更新我的对象图),当它想要运行时_uow.Commit();
:
c# - 何时禁用代理生成并使用 AsNoTracking?
在我的 WebApi 项目中,我使用 EF6,遵循 Uow 和通用存储库模式,并且我还将我的模型映射到 dto,反之亦然。
目前我在创建时设置了以下内容dbContext
:
AsNoTracking
从数据库中获取数据时我也会使用。
更新数据库时,我在处理小实体(即没有关系)时直接使用 dbContext 来附加实体。我将 GraphDiff 用于复杂实体(即具有关系)。
当启用代理和跟踪,甚至禁用它们时,我注意到发送到数据库的 SQL 语句包括所有表的列,而不仅仅是那些实际更改的列。
但是,GraphDiff 在将更改保存到数据库之前再次加载实体。本例中的 SQL 语句还包含所有列。这是正确的行为吗?
那么,在我的场景中,在处理分离实体时禁用代理和跟踪是否安全?
c# - 无法更改关系,因为一个或多个外键属性在保存时不可为空
我使用GraphDiff更新分离的对象图,并且在保存父对象及其子对象时出现上述异常。
模型和映射是:
对于插入和更新,我的存储库中有以下方法:
我执行以下操作:
- 添加一个新组,保存并重新加载
- 将用户添加到组,保存并重新加载
- 添加第二个用户,保存并重新加载
- 添加第三个用户,尝试保存 -> 抛出异常
在调试时,添加的用户实体的状态始终是分离的,并且对于新实体,两者GroupId
和Id
都设置为 0。添加的前 2 个用户已成功保存。但是,在第三个中,抛出异常。
如果,我总是使用相同的保存方法,为什么它并不总是有效?这是一个EF
或GraphDiff
问题,有没有办法解决这个问题?
SO和其他地方的大多数问题和相关答案都涉及删除子实体的情况。在我的特定情况下,情况并非如此。
c# - 使用 GraphDiff 删除拥有的实体 2 级深度
我在我的 MVC 项目中首先使用实体框架代码(版本 6)和 GraphDiff。
这是一些映射数据库中某些表的实体。
当我创建CommunicationPlan
具有许多CommunicationTopic
s 的ContributingMember
s 并保存聚合 rootCommunicationPlan
时,GraphDiff 将创建所有记录并将它们关联到数据库中。(正如我想要的那样)
问题
当我尝试CommunicationTopic
从现有中删除其中一个CommunicationPlan
主题时,从数据库中删除了该主题(根据我的需要),但是与ContributingMember
该主题相关的 sCommunicationTopic
并未从数据库中删除,只是它们的外键值设置为 null ,并且它们驻留在数据库中。
当我配置的外键ContributingMember
使其不接受空值时,我收到以下异常
操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
问题如何配置实体以使 GraphDiffContributingMember
在其父级删除时删除记录CommunicationTopic
?
c# - 将不同的子对象添加到拥有的集合时与 GraphDiff 的并发性
为了让事情不太复杂,我不会为这个问题使用我自己的实体模型,而是使用原始 GraphDiff-Blog-Post中的模型,其中有一个公司实体有多个联系人。为了说明我的问题,我认为这已经足够了。
所以基本上我的代码与graphdiff示例中的代码相同,效果很好:
问题是当试图在程序的 2 个不同实例上向同一公司添加新联系人时。例如,实例 1 保存了一个新的联系人 A,然后实例 2 保存了一个新的联系人 B。实例 1 中的图表在数据库中更新得很好,但实例 2 中的图表覆盖了实例 1 所做的所有更改并删除了新创建的联系人 A。
有没有办法用 Graphdiff 解决这个问题?也许我需要进行 2 个独立更新(一个用于公司,一个用于联系人),但首先使用 GraphDiff 已经没有多大意义了。还考虑过在更新图表之前做一个差异,但这似乎也有点矫枉过正。
或者,也许我只是对实体框架没有经验,以查看简单的解决方案:)
任何帮助表示赞赏!
干杯,迈克尔
entity-framework - GraphDiff:重新排列对象层次结构中的子项并保存更新的详细信息
我使用 GraphDiff 来保存代表以下数据模型的分离对象层次结构,
项目->课程->模块->主题。
问题是当我尝试重新排序对象层次结构时,
至
我已将模块 B 的 course_id 更新为 Course A id 并使用 graphdiff 将对象层次结构保存到数据库,这导致数据丢失(例如,保存后从数据库中删除了主题 B)。这就是我使用 graphdiff 保存项目对象的方式。
我想要的是在不丢失信息的情况下重新排列对象层次结构中的子项(对象树可以包含课程、模块和主题详细信息的更改)。此外,有人可以通过不同的例子提供关于 draphdiff 的好教程,因为我是新手 :)
谢谢你。
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 引发异常。至少,如果它提出一个完整的,它可能会很棒。