Ini memiliki DefiningQuery tetapi tidak ada elemen InsertFunction… err

123

Hal ini membuat saya gila, dan kesalahan itu tidak ada artinya bagi saya:

Tidak dapat memperbarui EntitySet 'TableB' karena memiliki DefiningQuery dan tidak ada elemen dalam elemen untuk mendukung operasi saat ini.

Tabel saya diletakkan seperti ini:

TabelA
int idA (identitas, kunci utama)
...

TabelB
int idA (FK untuk TableA.idA)
int val

TableB tidak memiliki kunci utama yang ditentukan di server SQL. Kerangka kerja entitas telah mengimpor tabel dan pengaitan dan menetapkan kedua bidang sebagai kunci. Tapi itu akan menampilkan kesalahan itu ketika saya mencoba melakukan penyisipan ke dalam tabel!

Apa yang salah??


Sunting: Seperti yang disarankan oleh Alex, solusinya adalah ini:

  1. Klik kanan pada file edmx, pilih Open with, XML editor
  2. Temukan entitas di elemen edmx: StorageModels
  3. Hapus seluruh DefiningQuery
  4. Ubah nama toko: Schema = "dbo" menjadi Schema = "dbo" (jika tidak, kode akan menghasilkan kesalahan yang mengatakan bahwa nama tidak valid)
  5. Hapus toko: Nama properti

Saya membiarkan kunci seperti itu, karena tidak masalah bagi saya bahwa kedua kolom adalah bagian dari kunci.

Palantir
sumber
6
Terima kasih atas pembaruannya - petunjuk langkah demi langkah membantu pemula EF ini membuat aplikasi tutorial ASP.NET MVC berfungsi!
Adam Neal
Terima kasih untuk ini! Saya punya masalah bahwa EF tidak menghasilkan file edmx yang tepat untuk tabel sql server 2000 yang MEMILIKI kunci utama. Tapi instruksi ini menyelamatkan saya :)
100r
4
3,5 tahun kemudian, dan posting ini masih membantu ppl, dalam hal ini, ME! ... Kepada: Palantir untuk penjelasan langkah demi langkah (berhasil) dan terima kasih kepada Alex >>> Bravo!
nanonerd
Solusinya berhasil untuk saya .. Terima kasih
Delavega
Rahasianya adalah menghapus "simpan:" dari definisi skema. Sangat bagus
Guilherme Ferreira

Jawaban:

141

Nah ketika tabel ditemui tanpa PrimaryKey itu diperlakukan sebagai Tampilan.

Dan tampilan muncul di file EDMX (buka di editor XML untuk melihatnya) di elemen StorageModel \ EntitySet [n] \ DefiningQuery.

Jika Anda memiliki DefiningQuery, Entitas menjadi hanya-baca kecuali Anda menambahkan fungsi modifikasi. Anda memerlukan 3 fungsi modifikasi (disebut juga Prosedur Tersimpan) satu untuk masing-masing Sisipkan, Perbarui, dan Hapus.

Tetapi Anda memiliki dua pilihan:

Ubah definisi kunci:

  1. Dan yakinkan EF bahwa yang menurutnya adalah tampilan sebenarnya adalah meja
  2. Atau tambahkan fungsi modifikasi yang sesuai

Dalam kasus Anda, saya merekomendasikan (1).

Alex James
sumber
Saya mendapatkan kesalahan ini ketika mencoba menambahkan entitas ke tabel persimpangan. Saran Anda memperbaikinya, terima kasih!
Walter Stabosz
Ini Luar Biasa ..., Tnks
Mohan Gundlapalli
Jangan lupa untuk mengklik "Perbarui Model dari Database" pada file .edmx yang Anda buat dari database terlebih dahulu
Bashar Abu Shamaa
Saya menghadapi masalah yang sama, bagian yang aneh adalah, ini berfungsi dengan baik di lingkungan lokal dan pengujian kami, hanya saja tidak berfungsi di lingkungan klien (membosankan)
Mox Shah
13

Tambahkan saja kunci utama ke tabel. Itu dia. Masalah terpecahkan.

ALTER TABLE <TABLE_NAME>
ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)
Jebastin J
sumber
6

Saya kehilangan kunci utama di meja saya dan mendapat pesan kesalahan ini. Satu hal yang saya catat adalah setelah saya menambahkan kunci ke tabel, saya perlu menghapus tabel dari edmx menggunakan desainer, simpan edmx, lalu perbarui lagi untuk menambahkan tabel kembali. Itu tidak mengambil kunci karena sudah ditetapkan sebagai tampilan. Ini tidak perlu mengedit edmx secara manual.

mlapaglia
sumber
5

Tambahkan kunci utama ke tabel, hapus model dari model edmx, lalu pilih pembaruan dari database, buat dan jalankan ...... karya


sumber
1

@Palant. Pastikan kedua tabel Anda memiliki kumpulan Kunci Utama, dan berhati-hatilah dengan beberapa kunci utama yang disetel dalam sebuah tabel.

Paulo 'PaulusHC' Gomes
sumber
0
  1. Anda perlu membuka file .EDMX secara manual di notepad atau notepad ++ atau di editor teks pilihan Anda.
  2. Temukan entri di edmx: StorageModels dalam file dibuka di langkah1.
  3. Temukan elemen DefiningQuery dan hapus tag ini seluruhnya.
  4. Temukan toko: Schema = "dbo" to Schema = "dbo" (jika anda melewatkan langkah ini maka akan menghasilkan error nama tidak valid).
  5. Simpan dan tutup file.

Semoga ini akan menyelesaikan masalah.

Brijesh Kumar Tripathi
sumber