實體框架刪除對象問題

ado.net c# entity-framework

我得到“對象無法刪除,因為它沒有在ObjectStateManager中找到”。同時刪除對象。

這是代碼;

//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();


            }}

一般承認的答案

您需要對象附加ObjectContext 。嘗試:

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

ObjectContext跟踪附加對象。這是執行刪除和更新所必需的。您可以閱讀有關在MSDN上附加對象的更多信息。

編輯以澄清附加/分離:

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
    }
}

此外,您應該using塊來包裝ObjectContextusing


熱門答案

在您的方法“Form1_Load”中,您創建了“FirebirdEntity”上下文的FIRST實例,並使用從此上下文中選擇的實體填充ListViewItem

在您的方法“button3_Click”中,您可以創建“FirebirdEntity”上下文的NEW,SECOND實例。然後,您嘗試刪除在第一個上下文中選擇的SECOND上下文中的實體。

在兩種方法中使用相同的上下文實例,一切都會正常工作。

(或者,您可以從SECOND上下文中選擇要刪除的實體,然後刪除此實體而不是原始實體)



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因