0

エンティティ フレームワークを使用して行を削除しようとすると、このエラーが発生します。本当に理由がわかりません!

ObjectStateManager で見つからなかったため、オブジェクトを削除できません。

   public void Delete(int ticketID)
            {

                Modules.Entity.gmEntities context = new Modules.Entity.gmEntities();

                var ticketitem = context.xticketitem.Select(p => p.TicketID == ticketID);

                ticketitem.ToList().ForEach(r => context.DeleteObject(r));

                context.SaveChanges();

            }
4

1 に答える 1

1

を呼び出すとcontext.xticketitem.Select(p => p.TicketID == ticketID);、コンテキストに存在しないブール値のリストが取得されます。

私はあなたがこのようなことをすべきだと思います:

var ticketitem = context.xticketitem.Where(p => p.TicketID == ticketID);
ticketItem.ToList().ForEach(r => context.xticketitem.DeleteObject(r));
context.SaveChanges();

編集:.ToList()スニペット間の違いをより明確にするために、次の行に移動しました。段階的に修正してみましょう。

  1. 電話するとvar ticketitem = context.xticketitem.Select(p => p.TicketID == ticketID);

    すべての xticketitems を使用して、各アイテムの TicketID が Delete メソッドに引数として渡された ticketID 変数と等しいかどうかを返すクエリを作成しています。このクエリの結果は ですIEnumerable<bool>

    私のコードは を返しますIEnumerable<xticketitem>。主な違いです。

  2. context.DeleteObject(r)あなたのr変数を呼び出すときはboolです。コンテキストで DeleteObject メソッドを呼び出しています。その方法は、型のパラメーターを受け入れますobject(そのため、コンパイル時にエラーが発生しません)。

    xticketitemタイプの厳密に型指定されたパラメーターを受け入れる ObjectSet でDeleteObject を呼び出していますxticketitem

于 2013-07-15T14:40:54.550 に答える