Tiba-tiba saya terus mendapatkan MetadataException
instantiate ObjectContext
kelas yang dihasilkan saya . String koneksi di App.Config terlihat benar - belum berubah sejak terakhir kali berfungsi - dan saya telah mencoba membuat kembali model baru (edmx-file) dari database yang mendasarinya tanpa perubahan.
Adakah yang punya ide?
Rincian lebih lanjut: Saya belum mengubah sifat apa pun, saya belum mengubah nama majelis keluaran, saya belum mencoba menyematkan EDMX di perakitan. Saya hanya menunggu 10 jam dari meninggalkan pekerjaan sampai saya kembali. Dan kemudian itu tidak berfungsi lagi.
Saya sudah mencoba membuat ulang EDMX. Saya sudah mencoba membuat ulang proyek. Saya bahkan sudah mencoba membuat ulang database, dari awal. Tidak beruntung, apa pun.
sumber
Jawaban:
Ini berarti bahwa aplikasi tidak dapat memuat EDMX. Ada beberapa hal yang dapat menyebabkan hal ini.
Singkatnya, tidak ada cukup detail dalam pertanyaan Anda untuk memberikan jawaban yang akurat, tetapi semoga ide-ide ini membuat Anda berada di jalur yang benar.
Pembaruan: Saya telah menulis posting blog dengan langkah-langkah yang lebih lengkap untuk pemecahan masalah .
sumber
Perubahan kecil ini membantu masalah ini.
Saya punya Solusi dengan 3 proyek.
mengubah
sumber
Anda bisa mendapatkan pengecualian ini ketika Edmx dalam satu proyek dan Anda menggunakannya dari yang lain.
Alasannya adalah
Res://*/
uri yang menunjuk ke sumber daya di majelis CURRENT. Jika Edm didefinisikan dalam rakitan berbeda dari kode yang menggunakannya, res: // * / tidak akan berfungsi karena sumber daya tidak dapat ditemukan.Alih-alih menentukan '*', Anda harus memberikan nama lengkap majelis sebagai gantinya (termasuk token kunci publik). Misalnya:
Cara yang lebih baik untuk membangun string koneksi adalah dengan EntityConnectionStringBuilder:
Jika Anda masih menemukan pengecualian, buka rakitan di reflektor dan periksa nama file untuk file .csdl, .ssdl dan .msl Anda. Ketika sumber daya memiliki nama yang berbeda dengan yang ditentukan dalam nilai metadata, itu tidak akan berfungsi.
sumber
res://MyAssembly/folder.<filename>.csdl...
Saya memiliki kesalahan serupa. Saya telah menciptakan kembali proyek (cerita panjang), dan menarik semuanya dari proyek lama. Saya tidak menyadari bahwa model saya berada di direktori yang disebut 'Model' sebelumnya, dan sekarang berada di direktori yang disebut 'Model'. Setelah saya mengubah koneksi di Web saya. Konfigurasi dari ini:
untuk ini:
Semuanya bekerja (diubah
Model
menjadiModels
). Perhatikan bahwa saya harus mengubah tiga tempat ini dalam string ini.sumber
Dan cara cepat untuk memeriksa nama model tanpa Reflector .... lihat direktori
dan periksa apakah file sumber daya .csdl, .msl, dan .ssdl ada di sana. Jika mereka berada dalam sub-direktori, nama sub-direktori harus didahulukan dengan nama model.
Sebagai contoh, tiga file sumber daya saya ada di Sub-direktori Data , jadi string koneksi saya harus
(versus metadata = res: //*/MyModel.csdl | res: //*/MyModel.ssdl | res: //*/MyModel.msl;).
sumber
Saya juga punya masalah ini dan itu karena connectionstring di web.config saya sedikit berbeda dari yang ada di app.config dari assembly di mana EDMX saya berada. Tidak tahu mengapa itu berubah, tetapi di sini adalah dua versi yang berbeda.
App.config:
Web.config:
Apa yang diperbaiki hanyalah menyalin string app.config (perhatikan perbedaan kecil di akhir - alih-alih "
App=EntityFramework
" ia inginkan "application name=EntityFramework
") ke web.config dan masalah terpecahkan. :)sumber
The .NET Framework data provider for SQL Server (SqlClient) supports many keywords from older APIs, but is generally more flexible and accepts synonyms for many of the common connection string keywords.
string koneksi Entity Framework tidak membagikan fleksibilitas itu, jadi Anda harus menggunakan hanya kata kunci yang diharapkan.Ini terjadi pada saya ketika saya secara tidak sengaja mengganti Action Build dari file edmx (muncul di bawah Properties di IDE) dari 'EntityDeploy' ke 'None'. EntityDeploy adalah apa yang mengisi metadata untuk Anda: lihat http://msdn.microsoft.com/en-us/library/cc982037.aspx
sumber
Ini terjadi pada saya ketika saya tidak membersihkan solusi sebelum membangun desainer .edmx baru. Jadi jangan lupa untuk membersihkan solusi sebelum Anda membangun desainer .edmx baru. Ini membantu saya untuk melewatkan lebih banyak masalah dengan yang ini. Di bawah detail navigasi yang disediakan jika Anda baru di studio visual.
Semoga ini membantu. Terimakasih semuanya
sumber
Saya baru saja menghabiskan 30 menit bahagia dengan ini. Saya telah mengubah nama objek entitas, mengubah entri pada file konfigurasi, tetapi masih ada lagi ... Anda harus mengubah referensi ke csdl juga
sangat mudah dilewatkan - jika Anda mengganti nama, pastikan Anda mendapatkan semuanya ....
sumber
Saya memiliki masalah yang sama. Saya melihat dll saya yang sesuai dengan reflektor dan telah melihat bahwa nama sumber daya itu tidak benar. Saya berganti nama dan sekarang terlihat baik-baik saja.
sumber
Untuk kasus saya, ini diselesaikan dengan mengubah properti file edmx.
ini memecahkan masalah bagi saya. Masalahnya adalah, ketika wadah mencoba menemukan data meta, ia tidak dapat menemukannya. jadi cukup membuatnya di majelis yang sama. solusi ini tidak akan berfungsi jika Anda memiliki file edmx di majelis lain
sumber
Saya menghabiskan sepanjang hari untuk kesalahan ini
jika Anda bekerja dengan
n-tear architecture
atau Anda mencoba
separate Models
dihasilkan olehEDMX
formulir DataAccessLayer untukDomainModelLayer
mungkin Anda akan mendapatkan kesalahan ini
webconfig (UILayer)
danappconfig (DataAccessLayer)
samaKedua yang sangat penting itu
connection string
yang mana masalahnya
dari mana di bumi saya dapatkan
Model
atau apa pun .csdl di string koneksi saya di mana merekadi sini saya solusi kami lihat gambar
semoga membantu anda
sumber
Saya bisa menyelesaikan ini di Visual Studio 2010, VB.net (ASP.NET) 4.0.
Selama wizard model entitas, Anda akan dapat melihat string koneksi entitas. Dari sana Anda dapat menyalin dan menempel ke string koneksi Anda.
Satu-satunya hal yang saya lewatkan adalah "App_Code." dalam string koneksi.
sumber
Setelah berjam-jam googling dan mencoba memecahkan tidak ada solusi yang disarankan berhasil. Saya telah mendaftarkan beberapa solusi di sini. Saya juga mencatat satu yang bekerja untuk saya. (Saya menggunakan EF versi 6.1.1, dan SQL server 2014 - tetapi DB yang lebih lama)
connectionString="metadata=res://*/DAL.nameModel.csdl|res://*/DAL.nameModel.ssdl|res://*/DAL.nameModel.msl;
(ini adalah file. Untuk melihatnya, Anda dapat beralih Tampilkan Semua File dalam solusi explorer, di bawah direktori ~ / obj / ..)... dan masih banyak lagi yang saya coba [seperti: mengembalikan versi EntityFramework ke versi yang lebih baru (tidak yakin tentang itu)]
apa yang berhasil untuk saya:
dari artikel ini di sini , itu membantu saya menyelesaikan masalah saya. Saya baru saja mengubah
ProviderManifestToken="2012"
keProviderManifestToken="2008"
dalam file EDMX. Untuk melakukan ini:Penjelajah solusi
Saya harap itu membantu.
sumber
Jika Anda menggunakan edmx dari proyek yang berbeda, maka dalam string koneksi, ubah ...
...untuk...
sumber
folder.subfolder
sebelumnya.Solusi utama (bahkan setelah membuat ulang database di dua mesin lain, serta EDMX dan serba-serbi lain) adalah tidak menggunakan edisi pertama dari Entity Framework. Menanti untuk mengevaluasi lagi di .NET 4.0.Setelah mengalami masalah yang sama lagi dan mencari seluruh jawaban, saya akhirnya menemukan seseorang yang memiliki masalah yang sama. Tampaknya string koneksi tidak dibuat dengan benar oleh wizard Visual Studio, dan tautan ke sumber daya metadata tidak memiliki jalur penting.
v1.0 BUG ?: Tidak dapat memuat sumber daya metadata yang ditentukan. Script! = Model
Pembaruan 2013-01-16 : Setelah beralih ke hampir secara eksklusif menggunakan praktik EF Code First (bahkan dengan database yang ada) masalah ini tidak lagi menjadi masalah. Bagi saya, itu adalah solusi yang layak untuk mengurangi kekacauan dari kode dan konfigurasi yang dibuat secara otomatis dan meningkatkan kendali saya sendiri terhadap produk.
sumber
Masalah dan solusi saya, gejalanya sama "Tidak dapat memuat sumber daya metadata yang ditentukan" tetapi akar penyebabnya berbeda. Saya punya 2 proyek dalam solusi satu adalah EntityModel dan yang lainnya solusinya. Saya benar-benar menghapus dan menciptakan kembali file EDMX di EntityModel.
Solusinya adalah saya harus kembali ke proyek Aplikasi Web dan menambahkan baris ini ke file konfigurasi. Model baru telah mengubah beberapa item yang harus diduplikasi dalam file Web.Config proyek "lain". Konfigurasi lama tidak lagi bagus.
sumber
Terkadang saya melihat kesalahan ini di proyek saya. Saya menyelesaikannya dengan
1 - Klik kanan pada file EDMX
2 - Pilih
Run Custom Tool
opsi3 - Membangun kembali proyek
sumber
Dalam kasus saya, masalah ini terkait dengan penggantian nama file edmx model saya ... memperbaiki string koneksi app.config untuk file csdl / ssdl / msl memperbaiki masalah saya.
Jika Anda menggunakan desainer EF 4.0 untuk menghasilkan csdl / ssdl / msl Anda, 3 "file" ini sebenarnya akan disimpan dalam file edmx utama model. Dalam hal ini, pos oleh Waqas cukup banyak sasaran. Penting untuk memahami bahwa "Model_Name" dalam contohnya perlu diubah menjadi apa pun nama file .edmx model Anda saat ini (tanpa .edmx).
Selain itu, jika file edmx Anda tidak berada di level root proyek Anda, Anda perlu mengawali Model_Name dengan jalur relatif, mis.
akan menentukan csdl / ssdl / msl xml disimpan dalam file model 'WidgetModel.edmx' yang disimpan dalam folder bernama 'MyModel'.
sumber
Saya telah menulis kelas pembantu ini untuk membuat instance objek ObjectContext ketika mereka didefinisikan dalam proyek yang berbeda dari proyek yang menggunakannya. Saya mengurai string koneksi dalam file konfigurasi dan mengganti '*' dengan nama perakitan lengkap.
Itu tidak sempurna karena menggunakan refleksi untuk membangun objek, tetapi itu adalah cara paling umum untuk melakukannya yang bisa saya temukan.
Semoga ini bisa membantu seseorang.
sumber
Untuk kalian semua
SelftrackingEntities
Pengguna, jika Anda telah mengikuti Microsoft Walk-through dan memisahkan kelas konteks Objek ke proyek layanan wcf (dengan menautkan ke konteks .tt) sehingga jawaban ini untuk Anda:bagian dari jawaban yang ditampilkan dalam posting ini yang mencakup kode seperti:
TIDAK AKAN BEKERJA UNTUK ANDA !! alasannya adalah bahwa
YourObjectContextType.Assembly
sekarang berada di Assembley yang berbeda (di dalam perakitan proyek WCF),Jadi Anda harus menggantinya
YourObjectContextType.Assembly.FullName
dengan ->Selamat bersenang-senang.
sumber
Saya mengalami masalah dengan pesan kesalahan yang sama ini. Masalah saya telah diatasi dengan menutup dan membuka kembali Visual Studio 2010.
sumber
Punya masalah yang sama karena saya mengganti nama majelis.
Saya juga harus mengganti nama dalam atribut AssemblyTitle dan AssemblyProduct di proyek Properties / AssemblyInfo.cs, dan juga menghapus dan menambahkan kembali referensi ke file edmx.
Kemudian itu bekerja dengan baik.
sumber
Dengan memiliki masalah yang sama saya membuat ulang edmx dari Database. Memecahkan masalah saya.
sumber
Pengecualian adalah karena kompiler menunjuk ke Metadata yang tidak ada, jadi cukup Salin
app.config
connectionstring keWeb.config
ConnectionStringsumber
Saya juga memiliki masalah dan solusi yang sama seperti Rick, kecuali bahwa saya mengimpor .edmx yang sudah ada ke proyek baru, dan sementara namespace dasar tidak masalah itu diimpor ke subdirektori yang berbeda jadi saya juga harus memperbarui koneksi string di dalam Web.Config di tiga tempat, untuk memasukkan penamaan subdirektori yang berbeda:
sumber
Saya memiliki masalah yang sama dengan solusi yang berisi proyek dalam Folder Solusi, ketika mereka dipindahkan ke Root Solusi (untuk mengatasi bug yang dicurigai dengan Mvc3AppConverter karena lokasi proyek).
Meskipun solusi dikompilasi setelah semua * referensi proyek ditambahkan kembali sesuai kebutuhan, kesalahan dilemparkan ketika situs web diaktifkan
EDMX ada di salah satu proyek yang dipindahkan (proyek 'Data'), tetapi tentu saja kurangnya referensi ke proyek Data tidak menyebabkan kesalahan kompilasi, hanya kesalahan run-time.
Cukup menambahkan referensi yang hilang ke proyek utama untuk menyelesaikan masalah ini, tidak perlu mengedit koneksi sama sekali.
Saya harap ini membantu orang lain.
sumber
Sedangkan saya, saya telah memisahkan Data Access Layer dan lapisan User Interface. Jadi saya punya string koneksi entitas untuk setiap layer.
Sebelum saya mengubah dua string koneksi yang terpisah menjadi sama, saya masih menemukan kesalahan di bawah ini.
Jadi saya membuat string koneksi yang sama untuk dua lapisan (DAL, UI), Ini berfungsi dengan sempurna.
Solusi saya adalah membuat semua string koneksi tetap sama di mana pun mereka sudah disajikan .
sumber
Saya punya masalah ini kemarin dan sedang melihat kode saya di debug dan output dari SQL Profiler.
Apa yang saya tidak bisa mengerti, sebelum saya membaca dan memahami posting ini, adalah mengapa EntityFramework melempar kesalahan ini karena memanggil DB. Saya sedang mencari melalui ratusan baris dalam SQL Profiler mencoba mencari tahu apa yang salah dengan model database. Saya tidak dapat menemukan apa pun seperti panggilan yang saya harapkan, dan sejujurnya saya tidak yakin apa yang saya cari.
Jika Anda berada di posisi ini, periksa string koneksi. Dugaan saya adalah bahwa sebelum EntityFramework membuat SQL-nya, ia akan memeriksa model, yang ditentukan di bagian metadata dari string koneksi. Dalam kasus saya itu salah. EntityFramework bahkan tidak mencapai DB.
Pastikan nama-nama itu benar. Setelah saya menyelesaikannya, saya kemudian melihat panggilan dalam SQL Profiler di mana ApplicationName adalah 'EntityFramework' dengan SQL memanggil tabel yang diharapkan.
sumber
File app.config atau web.config yang buruk dapat melakukan ini .. Saya telah menyalin string koneksi app.config ke web.config saya di UI saya dan akhirnya memasukkan:
sumber