实体框架 - “无法定义两个对象之间的关系”错误,但我认为我正在使用相同的上下文

gle*_*ron 5 c# ado.net ado.net-entity-data-model entity-framework-4

在我的 ViewModel 中我有一些类似的代码:

public class OrderViewModel
{
    private UserOrder order;
    private DeliveryCentre deliveryCentre;

    // This is my EF Container
    private CatalogueContainer catalogue = new CatalogueContainer();

    // do some stuff...

    public void Save()
    {
        if (order == null)
        {
            order = catalogue.UserOrders.CreateObject();
        }
        // do some other stuff...

         if ((deliveryCentre == null)
            || (deliveryCentre.Id != deliveryCentreId))
        {
           deliveryCentre = catalogue.DeliveryCentres.First(centre => centre.Id == deliveryCentreId);

            //Causes a context error, not sure why...
            order.DeliveryCentre= deliveryCentre;
        }

        catalogue.SaveChanges();

    }
Run Code Online (Sandbox Code Playgroud)

因此,当交付中心是新的且订单是新的时,我会遇到旧的“无法定义两个对象之间的关系,因为它们附加到不同的 ObjectContext 对象”错误,这对我来说似乎有点不公平 - 我只是无法弄清楚我需要做什么才能使它们更多地属于同一对象上下文。我认为这是由于对实体框架行为的一些根本误解造成的。

gle*_*ron 2

事实证明,该解决方案仅与错误消息间接相关 - @Slauma 询问占位符//do stuff...,当我注释掉这些占位符时,错误消失了。

事实证明,那里还有另一种关系,我在其中创建对象而this.Item = new Item()不是使用this.Item = catalogue.Items.CreateObject(),因此它是在上下文之外创建的,并且当它添加到订单时,尽管订单本身是从本地上下文创建的,当添加了项目,这在某种程度上弄脏了上下文,但由于某种原因,当我添加下一个相关对象时,这才显示为问题。