Saya menggunakan kerangka kerja entitas dan ASP.NET MVC 4 untuk membangun aplikasi
Solusi saya dibagi menjadi dua proyek;
- Pustaka kelas yang menyertakan file model data (.edmx) saya dan beberapa antarmuka khusus
- Proyek MVC 'container' yang merujuk pustaka kelas di atas
Masalah saya adalah ketika saya mencoba menggunakan DbContext ' MyEntites ' saya mendapatkan kesalahan berikut:
Tidak ada string koneksi bernama 'MyEntities' yang dapat ditemukan di file konfigurasi aplikasi.
Saya kira masalahnya ada hubungannya dengan fakta bahwa string koneksi terletak di app.config dari pustaka kelas daripada proyek MVC.
Adakah yang punya saran?
PM> Update-Database -Verbose Using StartUp project 'xxxxx.Web.Home'. Using NuGet project 'xxxxx.Web.Home.Dal'. Specify the '-Verbose' flag to view the SQL statements being applied to the target database. Target database is: 'MovieDatabase-0.0.2' (DataSource: (LocalDb)\v11.0, Provider: System.Data.SqlClient, Origin: Configuration).
Jawaban:
Coba salin string koneksi ke file .config di proyek MVC.
sumber
Anda benar, ini terjadi karena perpustakaan kelas (di mana file .edmx) bukan startup / proyek utama Anda.
Anda harus menyalin string koneksi ke file konfigurasi proyek utama.
Jika Anda memulai / proyek utama tidak memiliki file konfigurasi (seperti itu dalam kasus Aplikasi Konsol saya) cukup tambahkan satu (proyek Startup - Tambah Item Baru -> File Konfigurasi Aplikasi).
Informasi lebih relevan dapat ditemukan di sini: MetadataException: Tidak dapat memuat sumber daya metadata yang ditentukan
sumber
pastikan bahwa Anda menjadikan proyek Anda (dengan DbContext) sebagai startup
ATAU
Tambahkan ke proyek yang ditetapkan sebagai startup string koneksi Anda di app.config (atau web.config)
ATAU
Panggil perintah seperti ini
Update-Database -Script -ProjectName '<project name>' -StartupProjectName '<project name>' -ConnectionString 'data source=.;initial catalog=<db name>;integrated security=True;MultipleActiveResultSets=True' -ConnectionProviderName 'System.Data.SqlClient'
Lalu coba lagi
sumber
Set as Startup Project
- sesuai tangkapan layar yang ditunjukkan di atas. (walaupun jika Anda menekan F5, Anda tidak akan dapat memulai perpustakaan kelas)Anda bisa meneruskan string koneksi ke
EntityFramework
dan melanjutkan hidup Anda:sumber
Ketika Anda menduga, itu ada hubungannya dengan string koneksi berada di app.config dari pustaka kelas.
Salin entri dari app.config kelas ke wadah
app.config
atauweb.config
filesumber
Jika Anda memiliki beberapa proyek dalam solusi, maka atur proyek sebagai dimulai di mana Anda memiliki App.config kebenaran Anda.
sumber
salin string koneksi
app.config
atauweb.config
file dalam proyek yang telah ditetapkan ke "Set asStartUp
Project" dan jika dalam kasus menggunakan kerangka kerja entitas dalam proyek lapisan data - silakan instal kerangka kerja nuget di proyek utama.sumber
Itu juga terjadi jika proyek startup diubah ke yang, yang tidak memiliki string koneksi .
sumber
Pastikan Anda menambahkan string koneksi setelah
entityFramework
bagian:sumber
Ya, itu konyol. Anda dapat menghindari menyalin string koneksi dengan menggunakan pembuat koneksi. Kode VB.Net (digunakan dalam produksi, tetapi sedikit dimodifikasi di sini, jadi perlakukan sebagai belum teruji, dengan senang hati membantu dengan masalah apa pun), di mana saya memiliki variabel serverName, variabel databaseName, saya meneruskannya ke metode dan membuatnya menghasilkan koneksi untuk saya:
sumber
apakah Anda menggunakan lebih dari satu proyek pada solusi Anda?
Karena jika ya, konfigurasi web yang harus Anda periksa adalah yang ada di proyek yang sama dengan file de .edmx
sumber
Tambahkan ConnectionString ke file MVC Project Web.config
sumber
Saya mengalami masalah ini ketika saya menggunakan beberapa proyects, mulai proyect dengan web.config dan app.config untuk proyek EntityFramework.
untuk menghindari masalah ini, Anda harus:
sumber
Saya telah menghadapi masalah yang sama. Saya tidak dapat memasukkan string koneksi ke proyek startup karena saya melakukan operasi akses data dari lapisan lain. juga jika Anda tidak memiliki app.config di proyek startup Anda kemudian tambahkan file app.config dan kemudian tambahkan string koneksi ke file konfigurasi tersebut.
sumber
Saya mendapatkan ini dengan tidak menetapkan proyek sebagai startup, seperti yang ditunjukkan oleh jawaban lain. Kontribusi saya dalam hal ini - ketika melakukan Add-Migrations dan Update-Database, tentukan proyek startup sebagai bagian dari perintah di Nuget Package Manager Console (jangan sertakan karakter '[' atau ']', itu hanya untuk menunjukkan kepada Anda bahwa Anda perlu mengubah teks yang ada di sana ke nama proyek Anda):
Itu harus dilakukan.
sumber
Itu karena kelas konteks Anda sedang diwarisi dari DbContext. Saya kira ctor Anda seperti ini:
name=...
harus diubah ke nama connectionString Andasumber
String koneksi yang dihasilkan oleh proyek yang berisi file .edmx menghasilkan string koneksi, ini akan muncul sebagai peninggalan dari app.config jenis file yang disalin ke direktori output dan direferensikan oleh executable untuk menyimpan informasi konfigurasi runtime.
Ini rusak dalam proyek web karena tidak ada proses otomatis untuk menambahkan informasi .config acak ke file web.config untuk proyek web.
Cara termudah adalah menyalin string koneksi dari file config ke bagian koneksi file web.config dan mengabaikan konten file config.
sumber
Cara terbaik yang baru saja saya temukan untuk mengatasi hal ini adalah dengan mengatur sementara proyek tersebut (kemungkinan besar perpustakaan kelas) untuk proyek startup. Ini memaksa konsol manajer paket untuk menggunakan proyek itu sebagai sumber konfigurasi. bagian dari alasannya diatur dengan cara ini adalah karena model top down yang biasanya diikuti oleh file-file konfigurasi. Aturan praktisnya adalah bahwa proyek yang paling dekat dengan klien (misalnya aplikasi MVC) adalah web.config atau app.config yang akan digunakan.
sumber
Pastikan Anda telah menempatkan string koneksi di ROOT web.config proyek startup.
Saya tahu saya agak menyatakan yang jelas di sini, tapi itu terjadi pada saya juga - meskipun saya sudah MEMILIKI string koneksi di Web proyek MVC saya. Konfigurasi (file .edmx ditempatkan di proyek perpustakaan kelas yang berbeda) dan saya tidak bisa mencari tahu mengapa saya terus mendapatkan pengecualian ... Singkatnya, saya menyalin string koneksi ke Views \ Web.Config secara tidak sengaja, dalam kombinasi aneh antara kelelahan dan tidak-bergulir-ke-bawah-dari skenario-the-solution-explorer. Ya, hal-hal ini juga terjadi pada pengembang veteran :)
sumber
Masalah ini terjadi ketika Anda menggunakan Layers di Proyek Anda dan mendefinisikan atau menginstal kerja frame Entity di DataLayer dan mencoba menjalankan Proyek Anda
Jadi untuk mengatasi masalah ini salin string koneksi dari lapisan di mana file Edmx ada dan tempelkan string koneksi di web.config utama.
sumber
Tambahkan string koneksi dalam file root web.config proyek MVC 'container' yang mereferensikan pustaka kelas sebagai berikut:
Jika Anda tidak ingin menggunakan "MyEntities" sebagai nama koneksi kemudian ubah sesuai keinginan tetapi buat perubahan berikut di kelas MyEntities DbContext Anda:
Alasan untuk kesalahan ini adalah, Jika kami tidak akan menentukan nama string koneksi atau menghubungkan string dalam kelas turunan DbConext (Dalam kasus Anda ini adalah MyEntities), maka DbContext akan secara otomatis mencari string koneksi di root web.config file whoes name is sama dengan nama kelas turunan (Dalam kasus Anda itu adalah Entitas Saya).
sumber
Saya punya masalah ini ketika menjalankan MSTest. Saya tidak bisa membuatnya bekerja tanpa bendera "noisolation".
Semoga ini bisa membantu seseorang. Habiskan banyak waktu untuk memikirkannya. Semuanya berjalan dengan baik dari IDE. Sesuatu yang aneh tentang Kerangka Entitas dalam konteks ini.
sumber
Migrasi reguler
Ada dua opsi - yang pertama yang disarankan semua orang di sini adalah untuk memastikan bahwa string koneksi ada di file Web.config proyek. Saat bekerja dengan string koneksi dari pengaturan aplikasi Azure, itu berarti menimpa nilai Web.config Anda dengan nilai-nilai Azure.
Migrasi biru atau otomatis (terprogram)
Ada opsi kedua yang tersedia jika Anda menjalankan migrasi secara terprogram, yang memungkinkan Anda untuk menjalankan migrasi menggunakan string koneksi yang diperoleh secara dinamis (atau melalui pengaturan aplikasi Azure) tanpa menyimpannya di Web.config:
Saat mengatur TargetDatabase konfigurasi , gunakan konstruktor DbConnectionInfo yang mengambil string koneksi dan nama penyedia alih-alih konstruktor yang hanya menggunakan nama koneksi. Jika string koneksi Anda tidak memiliki nama penyedia dan Anda menggunakan SQL Server / Azure SQL maka gunakan "System.Data.SqlClient"
sumber
Ini juga bisa mengakibatkan referensi dll yang tidak cukup direferensikan dalam kode panggilan. Retakan kikuk kecil bisa menyelamatkan hari Anda.
Saya mengikuti pendekatan DB First dan telah membuat file EDMX dalam proyek perpustakaan Kelas DAL, dan ini mengacu pada perpustakaan Kelas BAL, yang pada gilirannya direferensikan oleh layanan WCF.
Karena saya mendapatkan kesalahan ini di BAL, saya telah mencoba metode yang disebutkan di atas untuk menyalin detail konfigurasi dari App.config dari proyek DAL, tetapi tidak menyelesaikannya. Pada akhirnya dengan ujung seorang teman saya baru saja menambahkan file EDMX dummy ke proyek WCF (dengan DB Connectivity yang relevan dll), sehingga mengimpor semua yang diperlukan, dan kemudian saya hanya menghapus file EDMX, dan itu hanya menyingkirkan masalah dengan membangun bersih.
sumber
Ada komentar di jawaban teratas oleh @RyanMann yang menyarankan:
Ini saran yang fantastis!
Ini juga berfungsi untuk berbagi string koneksi antara file App.config dan Web.config!
Siapa pun yang ingin mengikuti saran ini, harus menuju ke jawaban SO ini . Ini memiliki panduan langkah demi langkah yang sangat bagus untuk berbagi string koneksi di antara beberapa proyek dalam sebuah solusi.
Satu-satunya peringatan adalah bahwa
configSource
harus ada di direktori atau sub-direktori yang sama. Tautan di atas menjelaskan cara menggunakan "Tambahkan sebagai Tautan" untuk menyiasati ini.sumber
Saya mengalami kesalahan ini ketika mencoba menggunakan EF dalam plugin AutoCAD. Plugin CAD mendapatkan string koneksi dari file acad.exe.config. Tambahkan string sambung seperti yang disebutkan di atas ke file konfigurasi acad dan berfungsi.
Kredit jatuh ke Norman.Yuan dari ADN.Network.
sumber
Jika Anda menggunakan model MVVM, cobalah untuk menyalin string koneksi ke semua bagian proyek Anda.
Misalnya, jika solusi Anda berisi dua proyek, proyek perpustakaan kelas dan proyek wpf, Anda harus menyalin string koneksi dari proyek backend (pustaka kelas perpustakaan) dan menempatkan salinan di file App.config dari proyek wpf.
Semoga bermanfaat bagi Anda :)
sumber
Tambahkan Connectoinstrnig di file web.config
sumber