将实体添加到Collection会将其从另一个实体(实体框架)中删除

时间:2014-06-25 11:52:45

标签: entity-framework collections

伙计们,我有一个非常奇怪的问题,我公司没有人知道。

我在一个对象中有一个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()这个方法有什么作用?为什么从其他集合中删除对象?它让我感到震惊,请帮助理解它!

1 个答案:

答案 0 :(得分:1)

事实上它非常简单。通过将新公式添加到另一个Cost对象updatingCost,EF会将外键值CostID更改为updatingCost.ID的值。

这是因为当在代码中操纵entites时,EF会多次执行 relationship fixup 。此过程可确保原始ID值和对象引用以及集合内容匹配。