Entity Framework Supprimer un problème d'objet

ado.net c# entity-framework

Question

J'obtiens "L'objet ne peut pas être supprimé car il n'a pas été trouvé dans ObjectStateManager". tout en supprimant objet.

voici des codes;

//first i am filling listview control.
 private void Form1_Load(object sender, EventArgs e)
    {
        FirebirdEntity asa = new FirebirdEntity();

        ObjectQuery<NEW_TABLE> sorgu = asa.NEW_TABLE;

        foreach (var item in sorgu)
        {
            ListViewItem list = new ListViewItem();
            list.Text = item.AD;
            list.SubItems.Add(item.SOYAD);
            list.Tag = item;
            listView1.Items.Add(list);

        }
//than getting New_table entity from listview's tag property.
 private void button3_Click(object sender, EventArgs e)
    {

            using (FirebirdEntity arama = new FirebirdEntity())
            {

               NEW_TABLE del = (NEW_TABLE)listView1.SelectedItems[0].Tag;
               arama.DeleteObject(del);
               arama.SaveChanges();


            }}

Réponse acceptée

Vous devez attacher l'objet à ObjectContext . Essayer:

NEW_TABLE del = (NEW_TABLE)listView1.SelectedItems[0].Tag;
arama.Attach(del);
arama.DeleteObject(del);
arama.SaveChanges();

Les objets attachés sont suivis par ObjectContext . Ceci est nécessaire pour effectuer des suppressions et des mises à jour. Vous pouvez en savoir plus sur l' attachement d'objets sur MSDN.

Modifier pour clarifier attacher / détacher:

private void Form1_Load(object sender, EventArgs e) {
    FirebirdEntity asa = new FirebirdEntity();

    ObjectQuery<NEW_TABLE> sorgu = asa.NEW_TABLE;
    foreach (var item in sorgu) {
        asa.Detach(item);
        // add to listView1
    }
}

En outre, vous devriez envelopper votre utilisation de ObjectContext en using blocs.


Réponse populaire

Dans votre méthode "Form1_Load" vous créez une instance FIRST de votre contexte "FirebirdEntity" et remplissez le ListViewItem avec les entités sélectionnées dans ce contexte.

Dans votre méthode "button3_Click", vous créez une instance NEW, SECOND de votre contexte "FirebirdEntity". Ensuite, vous essayez de supprimer une entité dans ce contexte SECOND, qui a été sélectionné dans le contexte FIRST.

Utilisez la même instance de votre contexte dans vos deux méthodes et tout fonctionnera correctement.

(Vous pouvez également sélectionner l'entité que vous souhaitez supprimer de votre contexte SECOND, puis supprimer cette entité au lieu de celle d'origine)



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi