存在我使用實體框架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波蘇斯與工作時注入。
有沒有人遇到過這個問題?如果是這樣,那麼解決方案是什麼?