【问题标题】:Add a Child to a Parent Entity without loading complete Child's Graph在不加载完整子图的情况下将子添加到父实体
【发布时间】:2013-10-23 00:47:22
【问题描述】:

我想知道是否有任何方法可以使用 EF4 实现这样的目标:

我想做类似的事情:

1. |   'Get Parent
2. |   Dim Parent as oParent = mContext.GetParent(parentId) 
3. | 
4. |   'Link a child without loading it entirely, only using his ID
5. |   oParent.Children.AddOnlyUsingChildId(aChildId) 'Or maybe EntityKey?
6. |
8. |   'Apply Changes (Save)
7. |   mContext.SaveChanges()

这一切都是因为,我不想每次都向服务器发出请求以获取整个子实体,而且无论如何,我只有孩子的 ID(来自复选框列表)。这是一个循环的一部分,在一个循环中,可能必须为每个第一级循环加载数百个子级。在我看来,这样做是可能的,因为实体图应该知道,当需要保存父级和N..N 关系时,他应该只在数据库映射表中插入“Parrent.nId 和 Child.nId”在孩子和父母之间......所以它不应该需要整个孩子的图表。

我说的对吗? 有可能吗?

【问题讨论】:

标签: asp.net vb.net visual-studio-2012 entity-framework-4 entity-relationship


【解决方案1】:

您可以通过创建“存根实体”并将其附加到上下文来实现此目的。使用 C# 语法的示例:

var child = new Child { ID = aChildId };
mContext.Children.Attach(child);
oParent.Children.Add(child);

【讨论】:

  • 嗯,最后很简单。谢谢@Slauma。我会尝试类似的东西; mContext.Attach(child); 但在尝试时出错......但以你的方式,这是有效的。再次感谢。
  • 顺便问一个问题,你知道是否有办法知道子集合是否发生了变化(新的孩子或其他什么)?
  • @SimonDugré:我认为只是查询数据库并将原始集合与您视图中的集合进行比较。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-15
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
相关资源
最近更新 更多