none
Problema al insertar registro con fk que hace referencia a otra tabla linq c# RRS feed

  • Pregunta

  • Hola a todos, soy nuevo por estos lados, escribo esperando que alguien me pueda ayudar a resolver el siguiente problema:
    Tengo 2 tablas, una tabla "EJECUTOR" que tiene una fk que hace referencia a la tabla "TIPO_EJECUTOR" de la cual estoy seleccionando de un combobox el tipo de ejecutor al que pertenece, para luego agregarlo a la bd, pero creo que tengo algo malo ahi en el metodo addEjecutor() donde le paso los parametros y en este caso le paso idEjecutor como int....esto no me permite hacer el insert, de hecho agrega todos los campos menos idEjecutor!!!
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.Linq;
    namespace Combo
    {
        class LinqEjecutor
        {
            public static void addEjecutor(int id, string rut, string nombre, string paterno,
                string materno, DateTime fnacimiento, string direccion, string telefono, int idtipoEjecutor)
            {
                InventarioDataContext ctx = new InventarioDataContext();
                var queryEjecutor = (from c in ctx.GetTable<EJECUTOR>()
                                       where c.EJ_ID == id
                                       select c).SingleOrDefault();
                if (queryEjecutor == null)
                {
                    try
                    {
                            Table<EJECUTOR> ejecutores = LinqEjecutor.getTableEjecutor();
                            EJECUTOR ejecutor = new EJECUTOR();
                            ejecutor.EJ_ID = id;
                            ejecutor.EJ_RUT = rut;
                            ejecutor.EJ_NOMBRES = nombre;
                            ejecutor.EJ_APELLIDOP = paterno;
                            ejecutor.EJ_APELLIDOM = materno;
                            ejecutor.EJ_FNACIMIENTO = fnacimiento;
                            ejecutor.EJ_DIRECCION = direccion;
                            ejecutor.EJ_TELEFONO = telefono;
                            ejecutor.TIPO_EJECUTOR.TI_ID = idtipoEjecutor;
                            //ejecutor.TIPO_EJECUTOR.TI_ID = idtipoEjecutor;
                            //ctx.TIPO_EJECUTOR.Single(p => p.TI_ID);
                            //ejecutor.TIPO_EJECUTOR = ctx.EJECUTOR.Single(p => p.TI_ID);
                            //ejecutor.TIPO_EJECUTOR.TI_ID = Convert.ToInt32(ctx.EJECUTOR.Select(p => p.TI_ID));
                            
                                /*REFERENCIA EJECUTOR*/
                        
                            ejecutores.InsertOnSubmit(ejecutor);
                            ejecutores.Context.SubmitChanges();
                     
                        
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }
                else
                {
                    try
                    {
                        queryEjecutor.EJ_RUT = rut;
                        queryEjecutor.EJ_NOMBRES = nombre;
                        queryEjecutor.EJ_APELLIDOP = paterno;
                        queryEjecutor.EJ_APELLIDOM = materno;
                        queryEjecutor.EJ_FNACIMIENTO = fnacimiento;
                        queryEjecutor.EJ_DIRECCION = direccion;
                        queryEjecutor.EJ_TELEFONO = telefono;                   
                        ctx.SubmitChanges();
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }
            }
            public int genera_id()
            {
                using (InventarioDataContext ctx = new InventarioDataContext())
                {
                    var query2 = (from tx in ctx.EJECUTOR
                                  select tx).Count() + 1;
                    return query2;
                }
            }
            public IQueryable cargar_gridview1()
            {
                InventarioDataContext ctx = new InventarioDataContext();
                var query = from te in ctx.EJECUTOR
                            select new { 
                                te.EJ_ID,
                                te.EJ_RUT,
                                te.EJ_NOMBRES,
                                te.EJ_APELLIDOP,
                                te.EJ_APELLIDOM,
                                te.EJ_FNACIMIENTO,
                                te.EJ_DIRECCION, 
                                te.EJ_TELEFONO,
                                te.TIPO_EJECUTOR.TI_OFICIO
                            };
                return query;
            }
            public IQueryable combo_tipoEjecutor() {
                InventarioDataContext ctx = new InventarioDataContext();
                var query = from te in ctx.TIPO_EJECUTOR
                            select te;
                return query;
            }
            #region full table
            public static Table<EJECUTOR> getTableEjecutor()
            {
                InventarioDataContext ctx = new InventarioDataContext();
                return ctx.GetTable<EJECUTOR>();
            }
            #endregion
        }
    }
    ¿Cómo puedo resolver este problema? 
    Saludos cordiales, desde ya....muchas gracias!!

    • Editado element_23 domingo, 23 de octubre de 2011 4:21
    domingo, 23 de octubre de 2011 3:02