Mengapa saya mendapatkan kesalahan ini: Tidak ada pemetaan yang ditentukan untuk EntitySet / AssociationSet - Entity1 berikut?


96

Saya menggunakan Entity Framework 4 dengan pendekatan Model First.

Saya memulai proyek, mendesain entitas, dan menghasilkan database. Semuanya bekerja dengan baik.

Lalu saya harus kembali dan menambahkan entitas lain ke model saya. Namun, saat saya menyeret entitas ke EDMX, saya mendapatkan kesalahan ini:

masukkan deskripsi gambar di sini

Baik! Saya hanya perlu memetakan Entity1 ke tabel .. Tapi, hei! Saya menggunakan pendekatan Model First, saya mengharapkannya untuk membuat tabel untuk saya ketika saya membuat DDL.

Bagaimana cara mengatasi kesalahan ini?


1
Jadi dapatkah menghasilkan skrip database dari model Anda?
Ladislav Mrnka

Jawaban:


147

Ini karena cara EF4 bekerja dengan model-first.

Saat Anda pertama kali membuat model yang mengutamakan model, SSDL dalam status tidak ada. Anda dapat menyeret entitas, mengaitkannya, dan sebagainya, namun, jika Anda melihat SSDL pada file EDMX, Anda akan melihat bahwa tidak ada entitas yang memiliki tabel penyimpanan terkait di SSDL.

Itu berubah ketika Anda mengklik Generate Database From Modelitem menu konteks. Bagian yang membingungkan adalah bahwa tindakan ini melakukan lebih dari sekadar menghasilkan skrip DDL. Bahkan, itu mengubah file EDMX untuk menyertakan informasi SSDL. Mulai saat ini, file EDMX akan memasuki keadaan di mana setiap entitas di desainer / CSDL harus memetakan ke entitas di SSDL. Jika tidak ada peta, itu akan memicu kesalahan waktu kompilasi:

Tidak ada pemetaan yang ditentukan untuk EntitySet / AssociationSet berikut - (EntityName)

Fakta menarik lainnya adalah bahwa ini bukan jenis kesalahan yang akan mencegah kompilasi. Ini memang akan menghasilkan pustaka kelas keluaran. Bukankah itu peringatan atau semacamnya?

Untuk mencegah kesalahan ini, Yang harus Anda lakukan setelah memasukkan entitas baru adalah melakukan Generate Database From Modellagi. Itu akan memperbarui SSDL dan memperbaiki pemetaan.

EDIT

Jika Anda tidak menggunakan model-first dan Anda "memperbarui dari database", Anda juga akan mengalami kesalahan ini jika Anda menghapus tabel di Server DB. Ini karena Entity Framework tidak secara otomatis menghapus entitas untuk Anda. Hapus entitas secara manual dan kesalahan akan hilang.


1
Saya mendapat masalah yang sama setelah memperbarui model saya terhadap perubahan bd (itu tidak baik, karena pendekatan saya bukan model-first).
balanza

5
@balanza, ketika Anda tidak menggunakan model-first dan Anda memperbarui model Anda berdasarkan database, Anda akan mendapatkan kesalahan ini ketika Anda menghapus tabel di server karena desainer EF TIDAK akan menghapus entitas secara otomatis. Saat Anda menghapus jenis entitas secara manual, kesalahan akan hilang
André Pena

Saya mengubah milik saya langsung di file xml dari model data entitas. Saya memiliki banyak tabel dan fungsi dan ada risiko beberapa ketidakcocokan sehingga saya melakukannya secara manual.
Bat_Programmer

Ini sangat membantu. Selain itu, jika Anda menggunakan model-first dan "update from database" dan mendapatkan tabel baru, Anda juga akan mengalami error. Tetapi menjalankan Generate Database from Model (tidak perlu benar-benar mengeksekusi skrip yang dihasilkan - itu akan mematikan data Anda!) Akan memperbaiki masalah pemetaan dalam kode Anda dan Anda tidak akan memiliki masalah untuk menggunakannya ke depannya.
Brian Warshaw

1
Bagaimana Anda menangani pemutakhiran skema untuk database SQL Server CE yang sudah digunakan? Dapat memindahkan ini ke pertanyaan terpisah, jika itu sama sekali tidak terkait prosedur
FYK

35

Saya menemukan saya mendapatkan kesalahan yang sama karena saya lupa membuat batasan referensial setelah membuat asosiasi antara dua entitas.


13
FYI: Periksa properti asosiasi, dan di bagian bawah "Batasan Referensial" akan kosong. Klik elipsis dan buat pembatas.
Patrice Calvé

Ini membantu saya. Saya harus membuat hubungan 1 .. * dari entitas asal saya ke entitas navigasi saya.
duyn9uyen

21

Galat 3027: Tidak ada pemetaan yang ditentukan untuk EntitySet / AssociationSet berikut ... "- Entity Framework sakit kepala

Jika Anda mengembangkan model dengan Entities Framework maka Anda mungkin mengalami kesalahan yang mengganggu ini di kali:

Kesalahan 3027: Tidak ada pemetaan yang ditentukan untuk EntitySet / AssociationSet berikut [Nama Entitas atau Asosiasi]

Ini mungkin tidak masuk akal ketika semuanya terlihat baik-baik saja di EDM, tetapi itu karena kesalahan ini biasanya tidak ada hubungannya dengan EDM. Apa yang seharusnya dikatakan adalah "buat ulang file database Anda".

Anda lihat, Entitas memeriksa SSDL dan MSL selama pembuatan, jadi jika Anda baru saja mengubah EDM tetapi tidak menggunakan Model Database Hasilkan ... maka ia mengeluh bahwa ada hal-hal yang hilang dalam skrip sql Anda.

Jadi, singkatnya, solusinya adalah: "Jangan lupa untuk Menghasilkan Model Database setiap kali setelah Anda mengupdate EDM Anda jika Anda melakukan pengembangan model pertama. Saya harap masalah Anda teratasi".


Ini bekerja untuk kesalahan yang sama melakukan Model Database Hasilkan membantu menghapus pengecualian
kolexinfos

7

Dalam kasus saya, pengembang lain telah menghapus beberapa tabel dari database yang mendasarinya. Ketika saya menyadari ini, dan menghapus tabel-tabel ini dari entitas, masalah terpecahkan. Tidak sejelas kedengarannya.


6

Saya mengalami kesalahan yang sama, tetapi saya tidak menggunakan model-first. Ternyata entah bagaimana file EDMX saya berisi referensi ke tabel meskipun tidak muncul di desainer. Menariknya, ketika saya melakukan pencarian teks untuk nama tabel di Visual Studio (2013) tabel tersebut tidak ditemukan.

Untuk mengatasi masalah ini, saya menggunakan editor eksternal (Notepad ++) untuk menemukan referensi ke tabel yang melanggar di file EDMX, dan kemudian (dengan hati-hati) menghapus semua referensi ke tabel. Saya minta maaf untuk mengatakan bahwa saya tidak tahu bagaimana file EDMX menjadi seperti ini sejak awal.


5

Saya memiliki perubahan tabel dan itu membuat entitas lain dengan angka 1 di bagian akhir (seperti MyEntity1dan a MyEntity) seperti yang dikonfirmasi oleh browser model edmx. Sesuatu tentang dua entitas bersama-sama membingungkan pemrosesan.

Penghapusan tabel dan menambahkannya kembali memperbaikinya.


Perhatikan bahwa jika TFS sudah terhubung, lakukan check-in di edmx setelah menghapus. Kemudian dan hanya kemudian dapatkan yang terbaru dan tambahkan kembali dalam proses dua langkah yang pasti. Jika tidak, TFS akan bingung dengan penghapusan dan penambahan kembali entitas bernama sama yang tampaknya menyebabkan masalah.


Saya memiliki masalah yang sama setelah mengganti meja. Saya menemukan entitas yang sama dengan nomor 1 dan 2 (MyEntity1, MyEntity2) di beberapa tempat di bawah model. Saya mencari di setiap cabang (Diagram, Jenis Entitas, dll.) Dan menghapus setiap instance MyEntity dan MyEntity [n]. Untuk ukuran yang baik saya melakukan "Solusi Bersih" dan kemudian diperbarui dari database untuk menambahkan kembali MyEntity saja.
MsTapp

4

Cara yang lebih cepat bagi saya adalah menghapus tabel dan menambahkannya kembali. Ini memetakannya secara otomatis. :)


2

Bagi mereka yang menggunakan Database Firstpendekatan, yang harus Anda lakukan setelah memasukkan entitas baru adalah Generate Database From Modellagi dengan mengklik kanan pada .edmxfile Anda dan pilihGenerate Database From Model...


0

Mengalami kesalahan ini ketika saya telah menghapus tabel dari database. Memecahkannya dengan mengklik kanan pada diagram EDMX, pergi ke Properties, memilih tabel dari daftar di jendela Properties, dan menghapusnya (menggunakan tombol hapus) dari diagram.


0
  1. Pergi ke Solution Explorer, klik tombol Search
  2. Biarkan dicentang baik Search within file contentdanSearch External Files
  3. Ketik nama entitas yang tidak dikenali oleh pemetaan Anda.
  4. Hapus semua file yang TERKAIT dengan masalah tersebut. Mereka mungkin akan diberi nama setelah entitas hilang yang sama. JANGAN hapus file apa pun dengan nama Kelas Konteks Anda pada file tersebut, khususnya jika ekstensinya adalah .cs atau .tt. Dalam file Context .cs .
  5. hapus semua baris kode yang mereferensikan entitas yang hilang. Mereka akan terlihat seperti ini:

    public virtual DbSet< Entity1> Entity1 { get; set; }

Kesalahan ini umum terjadi pada tabel yang dihapus dari database.

Ketika seseorang menjatuhkan tabel dalam database, atau seseorang hanya mengubah web.config.connectionStringsdatabase yang Dipetakan EF, untuk menunjuk ke yang baru dan bukan yang digunakan untuk menghasilkan pemetaan asli adalah masalahnya.

Ini adalah db baru entitas ini dengan kesalahan 3027 tidak ada.


0

Saya mengalami kesalahan ketika saya mencoba membuat hasil khusus untuk prosedur tersimpan dan berasumsi bahwa itu pasti suatu entitas.

Solusinya adalah saya baru saja membuat tipe kompleks di browser Model dan menetapkannya sebagai hasil ke "Edit fungsi impor".

Saya akan menambahkannya di sini karena sepertinya pertanyaan ini adalah ke mana google membawa Anda ketika Anda mendapatkan kesalahan ini.


0

Saya telah mengatur semuanya dengan benar (kardinalitas dan properti dependen) tetapi tidak tahu mengapa saya terus menerima kesalahan. Akhirnya menemukan bahwa, EF menghasilkan kolom dalam tabel dependennya sendiri (table_tablecolumn) dan tidak ada hubungannya dengan tabel, jadi tidak ada pemetaan yang ditentukan. Saya harus menghapus kolom di file EDMX dan membangun kembali solusi yang memperbaiki masalah. Saya menggunakan pendekatan DB.


0

Perbarui Model dari Database tidak berfungsi untuk saya.

Saya harus menghapus entitas yang berkonflik, lalu menjalankan Model Pembaruan dari Database, terakhir membangun kembali solusi. Setelah itu, semuanya berfungsi dengan baik.


0

Berbagi ini untuk orang lain. Dalam kasus saya, kami sedang mengerjakan solusi MVC bersama, dan menggunakan modul umum untuk tabel yang kami gunakan untuk dropdown. Saya mendapat kesalahan saat memperbarui model Entitas dengan menambahkan tabel baru. Ternyata ketika saya memperbarui EDMX, mungkin memperbarui akses hak saya pada database, yang mengakibatkan tidak memiliki akses ke tabel tertentu yang memberi saya no mapping specified.

Hanya menambahkan kembali dan memberikan akses ke pengguna saya telah menyelesaikan masalah.


0

Saya rasa saya mendapatkan ini dari tidak secara eksplisit menghapus beberapa tabel dari edmx sebelum mengganti nama dan menambahkannya kembali. Sebagai gantinya, saya hanya mengganti nama tabel dan kemudian melakukan Model Pembaruan dari Database, berpikir itu akan membuatnya hilang, dan menghapusnya dari model. Saya kemudian melakukan Model Pembaruan lain dari Database dan menambahkan tabel yang diganti namanya.

Situs ini berfungsi dengan tabel baru, tetapi saya mengalami kesalahan. Akhirnya, saya perhatikan tabel aslinya masih dalam model. Saya menghapusnya dari model (klik di layar edmx, tombol hapus), dan kemudian kesalahannya hilang.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.