Saya mendapatkan pesan kesalahan ini "Objek tidak dapat dihapus karena tidak ditemukan di ObjectStateManager."
Kode saya adalah:
protected MyEntities sqlEntities;
public virtual void Delete(TEntity entity)
{
System.Type t = typeof(TEntity);
sqlEntities.DeleteObject(entity);
sqlEntities.SaveChanges();
}
var entity = new TEntity() { PK_ID = 23 }; sqlEntities.DeleteObject(entity);
Saya mencoba membuat entitas tiruan dengan PK-nya yang disetel dengan benar, dengan harapan Kerangka Kerja Entitas akan memanggil DeleteObject berdasarkan PKJawaban:
Itu berarti bahwa entitas tidak dilampirkan (tidak dimuat oleh contoh konteks yang sama). Coba ini:
sumber
Hanya klarifikasi kecil atas jawaban Ladislav Mrnka (yang seharusnya merupakan jawaban yang diterima).
Jika seperti saya, Anda punya kode dalam format seperti ini:
..lalu inilah yang ingin Anda lakukan:
Mungkin ini tampak jelas, tetapi pada awalnya tidak jelas bagi saya bahwa perlu menentukan entitas yang akan dicocokkan, dan bukan hanya konteksnya .
sumber
Sekedar menyesuaikan penjelasan Kjartan:
Saya punya:
Masalahnya adalah saya menggunakan metode saya sendiri (GetProject ()) untuk mendapatkan entitas (karenanya menggunakan konteks lain untuk memuat entitas):
Salah satu solusinya adalah dengan melampirkan entitas yang dimuat seperti yang dinyatakan Kjartan, solusi lain dapat menjadi solusi tambang, untuk memuat entitas dalam konteks yang sama:
sumber
Saya tahu pertanyaan ini cukup lama tetapi tidak ada yang di atas yang berhasil untuk saya karena saya menghapus register dari lebih dari satu kelas / layanan dan masing-masing dari mereka memberi contoh konteks koneksi database itu sendiri.
Apa yang saya lakukan untuk menyelesaikannya adalah mengirim konteks pertama yang dibuat ke kelas / layanan lainnya yang akan mengakses database.
Misalnya, saya
serviceA
akan menghapus beberapa register dan memanggilnyaserviceB
danserviceC
melakukan hal yang sama dengan register mereka.Saya kemudian akan menghapus register saya
serviceA
dan meneruskan sebagai parameter konteks yang dibuat padaserviceA
keserviceB
danserviceC
.sumber
Anda dapat menulis kode ini:
sumber
Jika tidak ada yang berhasil, Anda dapat mencoba solusi ini:
context.Entry(yourObject).State = System.Data.Entity.EntityState.Deleted; context.SaveChanges();
sumber
Anda harus yakin bahwa objek Anda ada dalam daftar yang Anda coba hapus, Anda harus meletakkan kondisi berikut
jika Anda memiliki kondisi yang rumit untuk kesetaraan, Anda harus mengganti metode yang sama di kelas entitas untuk menempatkan kondisi Anda untuk kesetaraan, untuk mendapatkan cara yang benar untuk metode ekstensi "entity.contains"
sumber
Pastikan model yang diteruskan ke Remove (Entity) sama persis dengan record database.
Terkadang mungkin untuk meneruskan model tanpa beberapa bidang seperti Id atau Tanggal. simpan itu di @ html.Hiddenfor jika Anda memposting sebagai formulir.
Cara terbaik adalah dengan meneruskan ID dan mendapatkan entitas menggunakan metode Find (Id) dan meneruskannya ke Hapus (Entity)
Semoga ini bisa membantu seseorang.
sumber
Saya mendapat masalah ini dan menyelesaikannya. Cukup salin kode di bawah ini:
sumber
Dalam kasus saya, ada satu konteks, tetapi saya mendapatkan entitas dengan opsi 'AsNoTracking'
sumber