Entity Frameworkのオブジェクト削除問題

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アタッチする必要がありObjectContext 。試してください:

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

接続されたオブジェクトはObjectContextによって追跡され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
    }
}

また、 ObjectContextusingブロックの使用でラップする必要がありObjectContext


人気のある回答

あなたのメソッド "Form1_Load"では、あなたの "FirebirdEntity"コンテキストの最初のインスタンスを作成し、このコンテキストから選択されたエンティティでListViewItemを塗りつぶします。

あなたのメソッド "button3_Click"で、あなたの "FirebirdEntity"コンテキストの新しい、2番目のインスタンスを作成します。次に、最初のコンテキストで選択されたこの2番目のコンテキストのエンティティを削除しようとしました。

両方のメソッドで同じコンテキストのインスタンスを使用すると、すべてうまくいきます。

(あるいは、削除したいエンティティを2番目のコンテキストから選択してから、そのエンティティを削除することもできます)



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow