伙计们,我有一个非常奇怪的问题,我公司没有人知道。
我在一个对象中有一个Collection,我手工创建了它:
Cost cost = new Cost
{
...
};
cost.Formulas.Add(new Formula()
{
CostID = cost.ID,
FieldName = "Distance",
Formula1 = "12+2",
});
接下来,我从上下文中获得了另一个具有相同类型和ID的对象:
Cost updatingCost = context.Costs.Include("Formulas").FirstOrDefault(c => c.ID == cost.ID);
最后我做了:
updatingCost.Formulas.Add(cost.Formulas.ToList()[0]);
这是神奇的!在该行成本之后.Formulas不再包含该公式!!
cost.Formulas.Count = 0
iCollection.Add()这个方法有什么作用?为什么从其他集合中删除对象?它让我感到震惊,请帮助理解它!
答案 0 :(得分:1)
事实上它非常简单。通过将新公式添加到另一个Cost
对象updatingCost
,EF会将外键值CostID
更改为updatingCost.ID
的值。
这是因为当在代码中操纵entites时,EF会多次执行 relationship fixup 。此过程可确保原始ID值和对象引用以及集合内容匹配。