我没有尝试刷新任何FROM或TO数据库 我正在寻找的答案应该在内存中找到。
我面临一种奇怪的EF行为(我认为它不是一个真正的错误),它似乎是"相同"概念操作根据前提条件以两种不同的方式工作 幸运的是,案例简单且可重复 该模型包含一对相关表格;当我将一个表直接添加到其上下文的DbSets时(如果该对的哪一方并不重要),如果该对中的另一个表已经加载了#34;有时两者之间的联系是建立的,有时不是,它取决于另一个表(上下文已经知道的表)是" Read_from_DB"或者"添加"。
我尝试用2场景更好地描述问题:
数据库模型是一个简单的主/详细信息:
T_PARENTS
(使用Collection<T_CHILDREN>
)T_CHILDREN
(使用Reference<T_PARENTS>
)T_PARENTS
中的一行,带有键&#34; xyz&#34; T_CHILDREN
ctx.T_PARENTS.ToList();
(已加载1行)ctx.T_CHILDREN.ToList();
(已加载0行)var existing_parent = ctx.T_PARENTS.First();
existing_parent
的{{1}}集合为0行。T_CHILDREN
:
T_CHILDREN
var new_child = new T_CHILDREN() {parent_key = "xyz"};
ctx.T_CHILDREN.Add(new_child);
中,我们现在可以找到 existing_parent
1行(刚添加的行)。Collection<T_CHILDREN>
T_PARENTS
T_CHILDREN
(已加载0行)ctx.T_PARENTS.ToList();
(已加载0行)ctx.T_CHILDREN.ToList();
:
T_PARENTS
var new_parent = new T_PARENTS() {key = "xyz"};
ctx.T_PARENTS.Add(new_parent);
:
T_CHILDREN
var new_child = new T_CHILDREN() {parent_key = "xyz"};
ctx.T_CHILDREN.Add(new_child);
仍然具有 new_parent
有0行(我们无法找到刚添加到上下文中的new_children)。Collection<T_CHILDREN>
不起作用: - ))再次感谢你们! 毫
答案 0 :(得分:0)
这完全是关于具有上下文的实体状态。这里使用的最重要的方法是DbContext.Entry(object)
返回的EntityEntry
将为您提供EntityState
。
在第一种情况下,$this->zipClass->addFile('templates/document.xml', 'word/document.xml');
已经是被跟踪的对象,在第二种情况下,它很可能已被分离,直到您existing_parent
或明确设置SaveChanges
为State
转到EntityEntry
。
更多关于为什么:在第二个场景中,您将一个对象添加到集合中,但实际上并没有告诉上下文本身对它做任何事情。通过在EntityState.Added
上设置信息,您明确告诉上下文&#34;跟踪此对象&#34;