2017-05-11 3 views
0

L'opération ne peut pas être terminée car le DbContext a été supprimé.L'opération ne peut pas être terminée car le DbContext a été éliminé. Affecter le programme en cours

Je me demandais si quelqu'un m'aider avec ce problème. Voici mon code:

public partial class CustomerResearchForm : MetroFramework.Forms.MetroForm 
{ 
    FactorEntities contex; 
    public CustomerResearchForm() 
    { 
     InitializeComponent(); 
    } 

    private void CustomerResearchForm_Load(object sender, EventArgs e) 
    { 
    } 

    private void CResearchGrid_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e) 
    { 
     CustomerUpdateAndDelete CustomerUpdateAndDelete = new CustomerUpdateAndDelete(); 
     using ( contex =new FactorEntities()) 
     {  
      var sendergrid=(DataGridView)sender; 
      int customercode = Convert.ToInt32(sendergrid.Rows[e.RowIndex].Cells[1].Value); 
      var customer = from _customer in contex.tblCustomers where 
       _customer.CustomerCode==customercode select _customer; 

      CustomerUpdateAndDelete.tblCustomerBindingSource.DataSource = customer.ToList(); 
      CustomerUpdateAndDelete.Show(); 
      CustomerUpdateAndDelete.tblCustomerBindingNavigatorSaveItem.Click+=tblCustomerBindingNavigatorSaveItem_Click; 
     } 
    } 

    private void tblCustomerBindingNavigatorSaveItem_Click(object sender, EventArgs e) 
    { 
     contex.SaveChanges();  
     throw new NotImplementedException(); 
    } 
} 

L'exception se produit dans cette ligne:

contex.SaveChanges(); 

Je ne peux pas utiliser var pour mon contexte que dois-je faire?

+1

vous avez votre contexte enveloppé à l'intérieur d'un utilisant vous savez que les objets à l'intérieur de 'using() {}' sont auto-désinscrits, n'est-ce pas? – MethodMan

+0

faire une recherche Google sur le mot clé SCOPE – MethodMan

+0

dear @MethodMan Je l'ai eu. J'ai éliminé cela de mon code et l'erreur a disparu. mais après avoir modifié les infos sur le contexte, cela ne met pas à jour ma base de données! :( –

Répondre

0

Votre déclaration using sera automatiquement disposer contex à la fin de votre support de fermeture } dans CResearchGrid_CellMouseDoubleClick()

Je ne suis pas sûr de ce que vous enregistrez, mais pour passer, vous devez ajouter une déclaration using et initialiser contex objet. Si vous suivez la procédure d'initialisation de votre contex dans chaque méthode, supprimez-la de vos déclarations de membre de classe. Notez que vous devez modifier vos entités ou ajouter de nouvelles entités à votre objet contex pour que vous puissiez réellement enregistrer quoi que ce soit. Sans cela, vous n'économisez vraiment rien.

Une autre façon de procéder est d'initialiser contex dans votre constructeur et d'implémenter IDisposable. Ensuite, vous pouvez appeler contex.Dispose() dans la méthode Dispose().

+0

@MethodMan vous avez raison sur le support.Je veux appeler mon BindingNavigatorSaveItem et écrire mes codes dans son événement donc une autre méthode comme (tblCustomerBindingNavigatorSaveItem_Click) dont j'ai besoin, je devrais penser à un moyen qui utilise mon contexte dans ma boucle. –