none
Insercción en otra tabla al realizar un insert RRS feed

  • Pregunta

  • Buenas a todos,

    Estoy desarrollando una aplicación usando SQL CE y me he encontrado un problemilla que espero alguien me pueda solucionar. El problema es el siguiente:

    Tengo la siguiente clase:

    [Table(Name = "ShoppingListDetail")]
        public class ShoppingListDetail : INotifyPropertyChanging
        {
            #region Fields
            private int _id;
            private int _quantity;
            private bool _isChecked;

            [Column]
            internal int _fkMaster;
            private EntityRef<ShoppingListMaster> _master;

            [Column(IsVersion = true)]
            private Binary _version;

            #endregion

            #region Properties
            #region Id       
            [Column(AutoSync = AutoSync.OnInsert, CanBeNull = false, DbType = "INT NOT NULL IDENTITY", IsDbGenerated = true, IsPrimaryKey = true)]
            public int Id
            {
                get
                {
                    return _id;
                }
                set
                {
                    _id = value;
                    this.OnPropertyChanging("Id");
                }
            }
            #endregion

            #region Master
            [Association(Storage = "_master", IsForeignKey = true, ThisKey = "_fkMaster", OtherKey = "Id")]
            public Model.ShoppingListMaster Master
            {
                get
                {
                    return _master.Entity;
                }
                set
                {
                    _master.Entity = value;
                    this.OnPropertyChanging("Master");
                }
            }
            #endregion


            #region Quantity       
            [Column(DbType = "INT NOT NULL", CanBeNull = false)]
            public int Quantity
            {
                get
                {
                    return _quantity;
                }
                set
                {
                    _quantity = value;
                    this.OnPropertyChanging("Quantity");
                }
            }
            #endregion

            #region IsChecked
            [Column]
            public bool IsChecked
            {
                get
                {
                    return _isChecked;
                }
                set
                {
                    _isChecked = value;
                    this.OnPropertyChanging("IsChecked");
                }
            }
            #endregion
            #endregion

            public event PropertyChangingEventHandler PropertyChanging;
            public void OnPropertyChanging(string propertyName)
            {
                if (PropertyChanging != null)
                {
                    PropertyChanging.Invoke(this, new PropertyChangingEventArgs(propertyName));
                }
            }
        }


    Cuando quiero realizar una inserción de datos:
      using (Context.AppDBContext context = new Context.AppDBContext())
                {
                    context.ShoppingListDetail.InsertOnSubmit(detail);
                    context.SubmitChanges();
                }


    Donde Context.AppDBContext es una clase que hereda de DataContext y ShoppingListDetail es:
    public Table<ShoppingListDetail> ShoppingListDetail
            {
                get { return this.GetTable<ShoppingListDetail>(); }
            }

    El problema es que al realizar un insert en la tabla se realiza el insert pero además me crea un nuevo registro en la tabla “master” asociada…. ¿alguien me podría decir porque está ocurriendo esto y si se puede solucionar de alguna manera?

    Muchas gracias.

    Un saludo,
    José Luis.

    miércoles, 27 de junio de 2012 13:38

Todas las respuestas

  • Hola,

    Debe ser por la Integridad Referencial de la relacion de las tablas, que si estan relacionadas uno a uno se supone que cuando insertes una fila en una en la otra tambien debe haber una fila la que se relaciona

    http://www.todoexpertos.com/categorias/tecnologia-e-internet/bases-de-datos/lenguaje-sql/respuestas/227764/insertar-a-dos-tablas

    Mira este manual sobre integridad referencial

    Saludos



    Jose Mendez.
    Blog
    If a post answers your question, please click "Mark As Answer" on that post and "Mark as Helpful".
    Si un Post reponde a tu pregunta, por favor "Marcala como Respondida" y "Vota como útil".

    viernes, 29 de junio de 2012 17:22
  • Hola Jose,

    muchas gracias por responder a mi pregunta y por el enlace.

    Respecto a lo que me comentas, entiendo que va por ahí el problema, pero la verdad es que no se porque ocurre. He ido haciendo debug y en principio cuando voy a insertar la nueva fila el campo Master tiene un valor válido (incluso he llegado a forzar que coja el primer valor de la tabla master), realizando el debug puedo ver que todos los campos son correctos. Pero cuando se realiza el SubmitChanges el valor del campo Master cambia con los valores de un nuevo campo creado en la tabla Master.

    Para hacer la prueba he quitado la asociación a la tabla master y he metido una propiedad enlazada a otra tabla (Familia) que en otra clase me ha funcionado sin problema, pero al introducirla en esta clase me sigue produciendo el mismo comportamiento erroneo.

    ¿Se te ocurre a que pueda deberse este comportamiento anomalo?

    Muchas gracias por tu ayuda.

    Un saludo,

    José Luis.

    sábado, 30 de junio de 2012 10:13