title: Entity framework object context saves new entities that were not added
body: <p>I have been working with Entity Framework (VS2010 Framework 4.0) in my proyect. I had some trouble with using a different object context per form. What I did then, was to create a object context in the Main Menu Form (stays opened) and everytime I create and show one form, I pass that object context to this new form. Example:</p>
  
  <pre><code> public partial class frm_Menu : Base
  {
      public Sistema_financiero_Entities db = new Sistema_financiero_Entities();
  
      private void cancelarCuotaToolStripMenuItem_Click(object sender, EventArgs e)
      {
          frm_Cancelacion_Cuota Form1 = new frm_Cancelacion_Cuota();
          Form1.db = db;
          Form1.Show();
      }
  }
  </code></pre>
  
  <p>Ok, that solution worked fine until now because I needed to use and pass objects throw the differents forms sometimes, and if the objects contexts were different, I got an error.</p>
  
  <p>Now, I have detected a huge issue using it this way. I have a form, where I can pay for the different installments of a loan. I´ll attach an image so then you can see what I´m talking about.</p>
  
  <p><img src="https://i.stack.imgur.com/1k6ow.png" alt="enter image description here"></p>
  
  <p>There, you select the different installments you want to pay for. Then, you introduce the value you will finally pay in "Total cobrado". Here is the important thing: When the checkbox image is checked (the blue one - already checked in the image), I create a "payment" entity per installment. Every "payment" object is stored in a list. If I uncheck it, I can change the value and the same thing is done. Obviously, I´m clearing the list before doing a <code>list.Clear();</code>. Then, one the checkbox checked, I can press "Aceptar" (accept). There I add to the database every "payment"(PAGO) in the list. After that, I save all changes.</p>
  
  <pre><code>foreach (Pago p in Lista_nuevos_pagos)
  {
      db.AddToPago(p);
  }
  try
  {
      db.SaveChanges();
      this.Close();
  }
  </code></pre>
  
  <p>My problem, is that it´s not only adding those "payments" in the list but the other "payments" entities that were in the list before clearing it. I reach the conclusion that when I clear the list, the objects remains in the object context. I thought that if the entity is not in the database, I have to Add it to the entity in the object context as I did with pago (<code>db.AddToPago(p);</code>).</p>
  
  <p>I wanted to ask you guys how can I solve this issues. I solved it now doing this:</p>
  
  <pre><code>private void cancelarCuotaToolStripMenuItem_Click(object sender, EventArgs e)
      {
          Sistema_financiero_Entities db = new Sistema_financiero_Entities();
          frm_Cancelacion_Cuota Form1 = new frm_Cancelacion_Cuota();
          Form1.db = db;
          Form1.Show();
      }
  </code></pre>
  
  <p>Instead of creating just one global db for all forms, I create one in the Main Menu for every form. Then, in that form closed event, I dispose that object context. 
  Then, when i check the checkbox image, before creating the "payments", I delete every "Pago" entity from the object context:</p>
  
  <pre><code>foreach (Pago p in Lista_nuevos_pagos)
          {
              db.DeleteObject(p);
          }
  
  Lista_nuevos_pagos.Clear();
  </code></pre>
  
  <p>Doing this works correctly, but I´m still having trouble with some other created entities (Installments) that are not deleted when I clear a list. I think I´m doing it wrongly, thats why I need some direction to use EF correctly. I really need to get this done really soon, I don´t have too much time to read EF tutorials.</p>
  
  <p>Just in case, this is how I create every "Pago" (payment)</p>
  
  <pre><code>Pago p = new Pago();                                                    
  p.desc_aumento_intereses = nudwb1.Value;                            
  p.desc_aumento_punitorios = nudwb2.Value; 
  p.desc_aumento_gastos = nudwb3.Value;                           
  p.desc_aumento_comision = nudwb4.Value;
  p.cotizacion = ntxt_Cotizacion.Value;
  p.fecha_hora = fecha_hora;
  
  Cuota c = new Cuota();
  string name = tbx.Name.Substring(tbx.Name.IndexOf("-") + 1);
  int nro_cuota = Convert.ToInt32(name);
  c = Lista_cuotas_cobrar.Where(x =&gt; x.num_cuota == nro_cuota).First();
  
  p.Cuota.Add(c);
  </code></pre>
  
  <p>Thank you for reading, I know this is a lot of info. Hope some guide soon..</p>