gpt4 book ai didi

entity-framework - 检索/更新 ObjectContext 中已存在的 Entity Framework POCO 对象

转载 作者:行者123 更新时间:2023-12-04 07:23:51 25 4
gpt4 key购买 nike

我有一个使用带有 POCO 的 Entity Framework 4.0 的项目(数据存储在 SQL DB 中,启用了延迟加载),如下所示:

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 并返回内存中的实例,该实例具有 null 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 设置为 Overwrite,调用 ObjectContext.Refresh() 和 ObjectContext.DetectChanges() 无济于事......我怀疑这与 EF 在使用 POCO 时注入(inject)的代理对象有关。

有没有人遇到过这个问题?如果是这样,解决方案是什么?

最佳答案

您不应使用“new”来创建新实体,而应使用 ObjectContext.CreateObject() .这样,您的对象的代理将被实例化,而不是实体 POCO 类本身。

我知道这是一个老问题,但我偶然发现了它,并在一秒钟前读到了它。

关于entity-framework - 检索/更新 ObjectContext 中已存在的 Entity Framework POCO 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2836772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com