繁体   English   中英

如何添加没有关联实体的实体,但保存关系?

How to add an entity without related entities, but saving relation?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

据我了解,如果我在这样的上下文中更改条目的状态:

context.Entry(doc).State = EntityState.Added;

doc后面的整个对象图将设置为EntityState.Added 这就是这里描述的机制:

请注意,对于所有这些示例,如果添加的实体引用了尚未跟踪的其他实体,那么这些新实体也将添加到上下文中,并在下次调用 SaveChanges 时插入到数据库中。

在我的情况下,这种行为是不可取的。 当我收到doc实体时,它的关系已经在数据库中(在不同的上下文中添加),再次添加它们会导致错误。 我需要将doc添加到包含所有引用的数据库中,但不要尝试在图中添加其他对象。

当然,我可以显式地遍历所有图形并设置状态,但是是否存在更简单的方法?

2 个回复

你可以看看GraphDiff

根据此专用博客条目,它似乎符合您的需求:

假设您有一家拥有许多联系人的公司。 联系人不是单独定义的,而是公司的一对多(具有所需的父级)记录。 即公司是聚合根。 假设您有一个分离的公司图,并附有其联系人,并希望在数据库中反映此图的状态。

目前使用实体框架,您需要手动执行联系人的更新,检查每个联系人是否是新的并添加,检查是否更新并编辑,检查是否已删除然后从数据库中删除它。 一旦您必须为大型系统中的几个不同聚合执行此操作,您就会开始意识到必须有一种更好、更通用的方法。

好消息是,经过几次重构后,我找到了一个很好的解决方案。

Entity Framework Core 中,行为发生了变化,调用:

context.Entry(asset).State = EntityState.Added;

只会影响实体而不影响相关实体。

在此处输入图片说明

👉 我知道问题是针对 Entity Framework classic (不是Core ),但肯定会有更多人使用EF Core到达这里(像我一样)😉

1 如何在实体框架中查询相关实体(1:N关系)

在这样的场景中,获取相关实体的更好方法是什么:{class diagram here} ? 我写了两种方法(请注意类图中的区别)...项目具有ICollection of Tasks的属性,但Member没有。 两种方法都可行,我想知道哪种方法正确(更好/更快)。 或者,如果没有一个是好 ...

6 保存一对一关系实体

当我尝试保存订单实体时,出现以下错误: 违反完整性约束:1048列“ package_id”不能为空。 简化实体: 要点是两个实体都是新的。 所以他们还没有身份证。 有没有选择,可以用 ? ...

8 NHibernate保存相关实体

我有一个基本的结构。 一个User对象和一个UserDetails对象。 User表具有用于生成UserId的标识主键,然后我还要为此UserId保存一个UserDetails对象。 单独执行此操作很容易,但是我试图找到一种方法,使我可以一劳永逸,因为User类包含对UserDetails ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM