Entity Framework Ошибка обновления основных элементов сведений - PullRequest
0 голосов
/ 30 сентября 2010

Привет всем, я пытаюсь добавить новые элементы в основные записи, и я получаю сообщение об ошибке:

Оператор 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"]); Список лекарств = 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 голосов
/ 01 октября 2010

Ошибка в основном означает, что вы пытаетесь добавить строку в таблицу сведений, не предоставляя допустимый FK из основной таблицы.
Я предполагаю, что это происходит, когда выполняется if кодовый блок (txtIDorden.Text.Trim () == "") , что означает, что вы имеете дело с совершенно новым orden объект, который не имеет EntityKey до сохранения. Я вижу, что вы пытаетесь явно установить подробный объект для мастера через InvOrdenReference , что не имеет смысла в вашем сценарии. Я предлагаю установить его с помощью свойства навигации и позволить EF исправить его для вас во время выполнения. Итак, ваш foreach должен выглядеть примерно так:

foreach (var item in DetalleMedicamentosOrden) {
    if (item.InvOrdenReference.Value == null) {
        item.InvOrden = orden;                  
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...