在.SaveChanges()之后,在组合中复制了Childobjects。

时间:2012-11-30 14:51:49

标签: c# asp.net asp.net-mvc-3 entity-framework entity

我们正在使用工作单元模式与通用存储库模式结合使用。

POCO是这样构建的:

public class Aclass: IEntity{
public int ID;
public virtual Bclass Bproperty;
public virtual Cclass Cproperty;
}

使用IEntity

public interface IEntity{
int ID;
} 

当我们创建一个唯一的A对象时,我们指的是一个已经存在的B对象和C对象。 当我们保存.SaveChanges()A时,还会保存B和C的副本。因此,不是引用原始的B和C对象,而是A的Bproperty和Cproperty指的是新对象。

我们可以通过附加来修复它,但考虑到我们正在处理模式,这会影响我们的抽象级别。

有没有人知道如何以干净的方式解决这个问题?

1 个答案:

答案 0 :(得分:2)

您必须在Unchanged

之前将现有的B和C对象标记为SaveChanges
context.Entry<BClass>(bclass).State = EntityState.Unchanged; 

context.ObjectStateManager.ChangeObjectState(AEntity.BClass, EntityState.Unchanged);

(取决于您使用的上下文类型)