存在我使用实体框架4.0波苏斯(数据存储在SQL数据库,惰性加载启用)如下项目:检索/更新实体框架POCO对象已经在ObjectContext中
public class ParentObject {
public int ID {get; set;}
public virtual List<ChildObject> children {get; set;}
}
public class ChildObject {
public int ID {get; set;}
public int ChildRoleID {get; set;}
public int ParentID {get; set;}
public virtual ParentObject Parent {get; set;}
public virtual ChildRoleObject ChildRole {get; set;}
}
public class ChildRoleObject {
public int ID {get; set;}
public string Name {get; set;}
public virtual List<ChildObject> children {get; set;}
}
我想创建一个新的ChildObject,为其分配一个角色,然后将其添加到现有的ParentObject。之后,我想将新的ChildObject发送给调用者。
下面的代码正常工作,直到它试图从数据库中取回对象。 newChildObjectInstance只具有ChildRoleID,并且不包含对实际的ChildRole对象的引用。我尝试将新实例从数据库中取出以填充ChildRole属性。不幸的是,在这种情况下,EF不是创建一个新的ChildObject实例并将其分配给retreivedChildObject,而是在上下文中查找现有的ChildObject,并返回带有空的ChildRole属性的内存实例。
public ChildObject CreateNewChild(int id, int roleID) {
SomeObjectContext myRepository = new SomeObjectContext();
ParentObject parentObjectInstance = myRepository.GetParentObject(id);
ChildObject newChildObjectInstance = new ChildObject() {
ParentObject = parentObjectInstance,
ParentID = parentObjectInstance.ID,
ChildRoleID = roleID
};
parentObjectInstance.children.Add(newChildObjectInstance);
myRepository.Save();
ChildObject retreivedChildObject = myRepository.GetChildObject(newChildObjectInstance.ID);
string assignedRoleName = retreivedChildObject.ChildRole.Name; //Throws exception, ChildRole is null
return retreivedChildObject;
}
我已经尝试设置要在MergeOptions覆盖,调用ObjectContext.Refresh()和ObjectContext.DetectChanges()无济于事......我怀疑这是关系到代理对象是EF波苏斯与工作时注入。
有没有人遇到过这个问题?如果是这样,那么解决方案是什么?