【发布时间】:2013-06-03 08:24:32
【问题描述】:
是否再次将父实体附加到上下文并更新它应该更新子实体?我错过了什么吗?
或者我是否必须为子实体编写更新 EF 逻辑(在 DAL 中)?
这是我的示例代码模型:
ChildEntity entityChild;
if (ParentEntity.ChildEntity.SingleOrDefault() != null)
entityChild = ParentEntity.ChildEntity.SingleOrDefault();
else
{
entityChild = new ChildEntity();
ParentEntity.ChildEntity.Add(entityChild);
}
entityChild.ColumnA= txtA.Text;
entityChild.ColumnB= txtB.Text;
// Send entityParent for update
_objParent.Update(entityParent)
_objParent.Update() 代码:
context.vouchers.Attach(entityParent);
ObjectStateEntry objectState = context.ObjectStateManager.GetObjectStateEntry(entityParent);
objectState.ChangeState(System.Data.EntityState.Modified);
context.SaveChanges();
更新(父加载代码示例)
public ParentEntity GetById(int id)
{
using (var context = new DBEntities())
{
ParentEntity _entity = context.ParentEntity
.Include("ChildEntity")
.Where(e => e.parent_id == id);
return (ParentEntity)_entity.SingleOrDefault()
}
}
【问题讨论】:
-
您是否正在添加或更新父对象?如果您要更新对象,请告诉我们您是如何加载它的。
-
参见上面已经提供的 _objParent.Update() 代码。 1) 附加实体,2) 获取 ObjectStateEntry,3) 修改状态,4) 将更改保存到上下文。
-
如何加载父节点?
-
@RuiJarimba 哦,对不起,我误解了你。请看上面我已经添加了父加载代码。
-
ChangeState只改变entityParent的状态,而不是它的子对象。您还必须更改子对象的状态。
标签: c# entity-framework entity-framework-4