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:
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?
.net
entity-framework
entity-framework-4
André Pena
sumber
sumber
Jawaban:
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 Model
item 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: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 Model
lagi. 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.
sumber
Saya menemukan saya mendapatkan kesalahan yang sama karena saya lupa membuat batasan referensial setelah membuat asosiasi antara dua entitas.
sumber
Jika Anda mengembangkan model dengan Entities Framework maka Anda mungkin mengalami kesalahan yang mengganggu ini di kali:
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".
sumber
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.
sumber
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.
sumber
Saya memiliki perubahan tabel dan itu membuat entitas lain dengan angka 1 di bagian akhir (seperti
MyEntity1
dan aMyEntity
) 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.
sumber
Cara yang lebih cepat bagi saya adalah menghapus tabel dan menambahkannya kembali. Ini memetakannya secara otomatis. :)
sumber
Bagi mereka yang menggunakan
Database First
pendekatan, yang harus Anda lakukan setelah memasukkan entitas baru adalahGenerate Database From Model
lagi dengan mengklik kanan pada.edmx
file Anda dan pilihGenerate Database From Model...
sumber
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.
sumber
Search within file content
danSearch External Files
hapus semua baris kode yang mereferensikan entitas yang hilang. Mereka akan terlihat seperti ini:
Kesalahan ini umum terjadi pada tabel yang dihapus dari database.
Ketika seseorang menjatuhkan tabel dalam database, atau seseorang hanya mengubah
web.config.connectionStrings
database 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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber