【问题标题】:EF4 error:The relationship between the two objects cannot be defined because they are attached to different ObjectContext objectsEF4错误:无法定义两个对象之间的关系,因为它们附加到不同的ObjectContext对象
【发布时间】:2019-05-24 03:17:49
【问题描述】:

您好,我有一个问题,我在 vs2010 中使用 de model MVP(model,view,presenter) 和我的模型层(数据访问层)使用 EF 的网站 wscf

seguimiento 的表是介于 be cliente 和 gventa 表之间的中间表 所以我在 seguimiento 的表中插入了我的(DAL 层)中的 L2E,就像这样

public void InsertarSeguimiento(Seguimiento Seg)
    {
        using (var cont = new CelumarketingEntities())
        {
            cont.AddToSeguimiento(Seg);
            cont.SaveChanges();
        }
    }

在我的演示文稿层中,我从文本框中为我的 web 表单捕获了 seguimiento 的字段当我尝试将对象 cliente 放入 (seguimiento) objProxy.ClienteReference.Value
时出现这些错误无法定义两个对象之间的关系,因为它们附加到不同的 ObjectContext 对象。 我不明白为什么 gventa 对象没有那个错误

 protected void BtnInsertar_Click(object sender, EventArgs e)
        {
            string nombreGVentas = TbxVendedor.Text;
            char[] delimit = new char[] { ' ' };
            string[] arreglo = nombreGVentas.Split(delimit);
            GVenta IdGVentas = _presenter.getventas(arreglo[0], arreglo[1]);

            string nombrecliente = TbxCliente.Text;
            Project.CAD.Cliente  idCliente = _presenter.getCliente(nombrecliente);

            string hora = DdlHora.SelectedValue;
            string minutos = DdlMinutos.SelectedValue;

            string HorMin = hora + ":" + minutos;
            Project.CAD.Seguimiento objProxy = new Project.CAD.Seguimiento();

            objProxy.GVentaReference.Value = IdGVentas;
            objProxy.ClienteReference.Value = idCliente;   *// here i get the errors*
            objProxy.Descripccion = TbxDescripccion.Text;
            objProxy.Fecha = Calendar1.SelectedDate;
            objProxy.Hora = HorMin;

             _presenter.insertarseg(objProxy);   
        }

【问题讨论】:

    标签: c# linq-to-entities


    【解决方案1】:

    问题是您的 idCliente 已经附加到这里的上下文:

    Project.CAD.Cliente  idCliente = _presenter.getCliente(nombrecliente);
    

    因此,当您尝试将其分配给也在其他上下文中的另一个对象(您收到错误的行)时,EF 会抛出错误,因为它不知道将哪个对象放在什么上下文中(它只能属于一个上下文)。

    您需要做的是在返回_presenter.getCliente() 方法之前将idCliente 从它的上下文中分离出来。

    【讨论】:

    • 我不明白这是为什么?如果我的树对象或表来自相同的上下文?抱歉,我是新手,这是可能的,因为我在 n 层应用程序中,我必须使用自我跟踪实体?
    • 每次实例化上下文都是一个新的上下文,与所有其他上下文完全分开。当您使用某些上下文来获取实体时,所有这些实体都附加到该上下文。为了使用相同的上下文,您应该将上下文实例作为函数的参数传递。但是,上下文不可序列化 - 如果您正在使用上下文必须通过多个服务的 n 层应用程序,您应该使用自我跟踪实体。如果它只是 n 层(一个解决方案中的多个项目),那么它取决于您的设计。
    猜你喜欢
    • 1970-01-01
    • 2012-02-23
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多