【问题标题】:How to manipulate relations without fetching the related entities in EF6?如何在不获取 EF6 中的相关实体的情况下操作关系?
【发布时间】:2014-11-27 17:10:24
【问题描述】:

是否可以在 EntityFramework 6 中添加/删除相关实体而不实际获取相关实体?

我在尝试:

var a = new EntityA()
a.B = new EntityB { Id = 2 }; 
db.Entry(a).State = EntityState.Added;
db.SaveChanges();

ID 的实体已经存在于数据库中。我的尝试失败,但出现以下异常:

附加类型为“EntityB”的实体失败 因为另一个相同类型的实体已经有相同的主 核心价值。使用“附加”方法或设置时可能会发生这种情况 实体的状态为“未更改”或“已修改”,如果存在 该图具有冲突的键值。这可能是因为一些 实体是新的,尚未收到数据库生成的密钥 价值观。在这种情况下,使用“添加”方法或“添加”实体状态 跟踪图,然后将非新实体的状态设置为 “未更改”或“已修改”(视情况而定)。

【问题讨论】:

  • 如果您还没有获取相关实体的 ID,您如何知道它?
  • 这是一个网络应用程序。我已经在上一个请求中获取了它(当我呈现表单时)。然后我从一个组合中通过 ajax/websockets 收到了它。
  • 我自己不需要,但您应该能够将您的骨架EntityB 附加到上下文中。它会获得Unmodified 标志,因此EF 应该在您保存更改时保留它。

标签: c# entity-framework entity-framework-6


【解决方案1】:

要解决您的确切错误,您需要将新的B 实体的db.Entry( b ).State 设置为Unchanged(您的代码结果为Added

【讨论】:

  • 其实我用 set.Attach() 代替。
  • 状态应该是“未改变”而不是“未修改”
猜你喜欢
  • 2023-03-31
  • 2018-02-19
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
  • 1970-01-01
相关资源
最近更新 更多