更新主详细信息项的实体框架错误

时间:2010-09-30 17:35:23

标签: entity-framework

大家好我试图将新项目添加到主详细记录中,我收到错误:

INSERT语句与FOREIGN KEY约束“invOrden_InvOrdenDet_FK1”冲突。冲突发生在数据库“InventarioSIAIplus”,表“dbo.InvOrden”,列“IDorden”中。 声明已经终止。

当我向细节添加新项目时会发生此错误。

感谢您的帮助。 我用来添加和更新数据的代码:    InventarioSIAIplusEntities SIAplusContext =(InventarioSIAIplusEntities)(Session [“context”]);             InvOrden orden;

        if (txtIDorden.Text.Trim() == "")
        {
             orden = new InvOrden();
             orden.IDcentro = Convert.ToInt32(ddlCentros.SelectedValue);
             orden.estado = ddlEstadoOrden.SelectedValue;
             orden.fecha = DateTime.Now;
             orden.comentario = txtComentarioOrden.Text;
             orden.usuarioCrea = "Jeanc";                
             SIAplusContext.AttachTo("InvOrden",orden);              
        }
        else
        {
             int idorden = Convert.ToInt32(txtIDorden.Text.Trim());
             orden = SIAplusContext.InvOrdenes.Where(c => c.IDorden == idorden).First();
                //orden.lo.getOrden());                
             orden.estado = ddlEstadoOrden.SelectedValue;
             orden.fecha = DateTime.Now;
             orden.comentario = txtComentarioOrden.Text;
             orden.usuarioCrea = "Jeanc";

        }

        foreach (var item in DetalleMedicamentosOrden)
        {
            if (item.InvOrdenReference.Value == null)
            {
                item.InvOrden = orden;

            }
        }

        SIAplusContext.SaveChanges();

暂时添加细节的代码

InventarioSIAIplusEntities SIAplusContext =(InventarioSIAIplusEntities)(Session [“context”]);             列出meds = DetalleMedicamentosOrden;

         //Datos Detalle
        InvOrdenDet ordenDetalle = new InvOrdenDet();            
        ordenDetalle.cantidadSol = uscAgregarMedicamentos1.Cantidad;
        ordenDetalle.cantidadApr = uscAgregarMedicamentos1.CantidadAprobada;

        ordenDetalle.comentario=uscAgregarMedicamentos1.Comentario;
        ordenDetalle.comentario = uscAgregarMedicamentos1.Comentario;
        ordenDetalle.IDmedicamento=uscAgregarMedicamentos1.IDmedicamento;

        //Agrego el detalle a la lista de detalles que se va guardando en la memoria.
        meds.Add(ordenDetalle);

        //Paso la lista con el nuevo objecto actualizada.
        DetalleMedicamentosOrden = meds;

        //Consulto la lista con para hacer una proyeccion del query y trae el nombre del medicamento
        var medInfo = from a in DetalleMedicamentosOrden                          
                     select new { a,  a.cantidadSol, a.cantidadApr };

        //Cargo la data en el gridview.
        gvMedicamentosOrden.DataSource = medInfo;
        gvMedicamentosOrden.DataBind();

        //Mando a mostrar 
        mpePnMedicamentos.Show();

1 个答案:

答案 0 :(得分:0)

错误基本上意味着您尝试在详细信息表中添加一行而不从主表中提供合法的FK。
我猜你的 if 代码块(txtIDorden.Text.Trim()==“”)正在执行时会发生这种情况,这意味着你正在处理一个全新的 EntityKey 的> orden 对象。我可以看到您正在尝试通过 InvOrdenReference 将详细对象显式设置为master,这在您的方案中没有意义。我建议通过导航属性设置它,让EF在运行时为你修复它。所以你的 foreach 应该是这样的:

foreach (var item in DetalleMedicamentosOrden) {
    if (item.InvOrdenReference.Value == null) {
        item.InvOrden = orden;                  
     }
}