EF5: '{0}' dosyası '{1}' veritabanı olarak eklenemiyor


140

Burada açıklandığı gibi tam sorunla karşılaşıyorum ("Silinmiş MDF Dosyasına Eklenemiyor" bölümünü okuyun), ancak sorunun çözümü orada söylenmedi ...

Kısacası sorun, .mdfdosyayı sildikten sonra EF 5.0 kullanarak DB'ye erişmeye çalıştığımda aşağıdaki kural dışı durumun atılmasıdır.

DataException-> EntityException-> SqlException: '{0}' dosyası '{1}' veritabanı olarak eklenemiyor

DB dosyasını sildim ve şimdi bu başlatıcısı kullanmak için uygulamayı beklerken uygulamayı çalıştırırken o kötü hata mesajı alıyorum. Bunu düzeltmenin bir yolu var mı?


1
Maalesef belirli bir yanıt vermedim, ancak o zaman% 100 oranında çalışan bir çözümüm yoktu. Kullanıcı ekli veritabanlarını kullanarak şimdi hata önlemek için deneyin. Genelde SQL Server Management Studio ile bağlantı kurarak ve hatayı veritabanını ayırarak hatayı düzeltebilirim.
OdeToCode

Sorun zaten fiziksel dosyayı sildiğim gibi veritabanı artık yok olmasıdır. Aslında stüdyolardan birinde (VS ve harici entegre) bakmaya çalıştım. Cevabım gerçekten bir çözüm değil, daha çok bir geçici çözüm, sadece LocalDb'ye bağlı kalmanız gerekmediğini söylüyor.
Shimmy Weitzhandler

EF uzmanı Rowan Miller'dan - bkz. Romiller.com/2013/05/17/… Bir sonraki VS sürümünde daha iyi çözümler sunmayı umuyoruz.
RickAndMSFT

Yararlı bir sorun giderme kılavuzu: odetocode.com/blogs/scott/archive/2012/08/15/…
Tim Abell

Yanıtlar:


220

DB dosyasını silerseniz, hala SqlLocalDB'de kayıtlı kalır. Bazen DB silmek için düzeltir. Bunu komut satırından yapabilirsiniz.

  1. Başlat / programlar menünüzün altındaki "VisualStudio için Geliştirici Komut İstemi" ni açın.
  2. Aşağıdaki komutları çalıştırın:

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0


1
Sql Server Nesne Gezgini bulamadım, sanırım VS 2012 Express kullanıyorum. Bu yüzden kabul edilen cevabı deneyemiyorum. Ancak cevabınız benim için mükemmel çalıştı. Teşekkürler.
newman

3
Cevabınız beni kurtardı. Kabul edilen yanıttan (localdb) \ v11.0 alt düğümüne sahip değildim ve SQL Management Studio'dan referansları kaldıramadım, bu yüzden sizin için yaşayın!
Santux

18
Dosyaları sildikten sonra bu benim için çalıştı. Komutları ayrıca Araçlar -> Kütüphane Paket Yöneticisi -> Paket Yöneticisi Konsolu'ndan da çalıştırabilirsiniz.
Bart Verkoeijen

11
Yan not olarak, v11.0SQL LocalDB 2012'ye özeldir. LocalDB 2014 kullanıyorsanız, MS MSSqlLocalDbbunun yerine adını değiştirdi .
KodlamaWithSpike

4
Yukarıdaki yoruma ilişkin olarak da herhangi bir db adı giremezsiniz ve sadece varsayılan adınıza uygulanır, aşağıda vs2015 ile kullandım ve çalıştı: sqllocaldb.exe stop sqllocaldb.exe delete
Deviney

147

Hala çözüm arayanlar için ...

Görünüm / SQL Server Nesne Gezgini'ne gidin ve veritabanını (localdb) \ v11.0 alt düğümünden silin!
resim açıklamasını buraya girin

Esasen, dosyaların nerede olması gerektiğine dair yerel bir veritabanı vardır ve veritabanı dosyalarını silmek istiyorsanız, bunları manuel olarak değil, bu explorer yardımcı programından kaldırdığınızdan emin olun.


Bu kez beni bir kez, ikinci kez ben otomatik geçişler vardı == yanlış FML
workabyte

8
Ayrıca, görmüyorsanız. Yeni bir bağlantı ekleyin ve "(localdb) \ v11.0" (Windows Yetkilendirme ile) girin. Çok basit görünebilir, ama bir süreliğine ekranıma bakıyordum. :)
Peter

@Peter Tamam, Veritabanını ekledim ve şimdi 2 bağlamımı görüyorum. Bu görünümden sildiğimde yeni bir hata alıyorum: 'bu veritabanı için veri erişim seviyesi alınamıyor'. Komut istemini kullanarak bu sorunu çözebildim.
nVentimiglia

1
EF6'nın varsayılan bağlantı fabrikasını kullanırken, bunun yerine mssqllocaldb kullanıyor olabilirsiniz. Sunucuyu (LocalDb) \ mssqllocaldb olarak değiştirin ve bağlanıp bağlanmadığına bakın. LocalDb'nin birkaç sürümü var ve biri size göstermiyor.
Jim Yarbro

Ayrıca, yaşadıklarım: Artık veritabanınızı görmüyorsanız bağlantıyı kes'i tıklayın ve tekrar bağlanın. (Yenileme yardımcı olmaz)
StefanG

19

Önce JSobell'in çözümünü denedim ama veritabanımı burada listelemedi. VS Geliştirici Komut İstemi'nden CodingWithSpike komutlarını çalıştırdım, ama bu da işe yaramadı. Sonunda Paket Yöneticisi Konsolu'ndan CodingWithSpike'ın aynı komutlarını çalıştırdım ve işe yaradı.

    PM> sqllocaldb.exe stop v11.0
    LocalDB instance "v11.0" stopped.

    PM> 
    PM> sqllocaldb.exe delete v11.0
    LocalDB instance "v11.0" deleted.

    PM> sqllocaldb.exe start v11.0
    LocalDB instance "v11.0" started.

9

Peki.

Çözümüm basitti, yerel sunucuyu kullanmak için değiştim:

DataSourceBağlantı dizesindeki özniteliği değiştirdim :

Data Source=(LocalDb)\v11.0;blah

Kime:

Data Source=.\SQLEXPRESS;blah

Başka bir çözüm, SQL Management Studio üzerinden LocalDb'ye giriş yapmak ve bu veritabanını silmeye çalışmaktır:

resim açıklamasını buraya girin

Ancak benim için işe yaramadı, silmeye çalıştığımda "TITLE: Microsoft SQL Server Management Studio" yazıyor

'{0}' veritabanı sunucuda mevcut değil. (SqlManagerUI)

Ayırmaya çalıştığımda veritabanı, ayırma seçimi için listede görünmüyor, "Çevrimdışı ol" da beni yukarıdaki hataya götürüyor.

Bu da bunun LocalDB'de sağlam bir hata olduğunu düşündürüyor.


EF5 ile yerel DB kullanmaya çalışırken sorun yaşıyorum
Nikos

LocalDB, tıpkı IIS Express gibi Yönetici ilkelerine gerek kalmadan yerel hesabınız altında çalıştırabilme avantajına sahiptir. Bu, her bir kullanıcı için IIS veya SQL Server kurmadan projeleri birçok geliştiriciyle paylaşmanıza olanak tanır.
Bart Verkoeijen


2

Şimdi çözdüm en iyi ve kolay cevap, Sadece veri kaynağı olarak ur sql sunucu adını kullanın, ilk katalog veritabanı adı olmak ve orada mdf hattı kaldırmak gitmek


1

Benim durumumda geçişler kullanıyorum ve yapılandırmada sadece dataContext ve dataContext sınıfının adını değiştirdim (sadece yeniden adlandır), sonra tekrar deneyin ve bu yardımcı oldu


1

SQL 2014 için lütfen CodingWithSpike seçilen cevabı ve bu yorumu takip edin

Yan not olarak, v11.0, SQL LocalDB 2012'ye özgüdür. LocalDB 2014 kullanıyorsanız, MS, MSSqlLocalDb olarak yeniden adlandırıldı . - KodlamaWithSpike 29 Ağustos 14:20


Yararlı yan not, VS 2015 ile eski bir proje üzerinde bu çalışma ile karşılaşıyorum Daha fazla bilgi . Dan VS 2013 yılında benzer değişiklikler de vardır v11.0için ProjectsV12 . En azından makinemde :-).
nişan al

0

Aynı sorunu vardı ve el ile "DataDirectory" klasörü benim uygulama ikili dosyaları başka bir klasöre ayarlayarak çözüldü.

Bu satırı Global.asax Application_Start yöntemine koydum:

AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data"));

Bağlantı dizem şu anda şu şekilde ayarlanmış:

<connectionStrings>
    <add name="DataContext" connectionString="Data Source=(LocalDb)\v11.0; Initial Catalog=DataContext; Integrated Security=True; MultipleActiveResultSets=True; AttachDbFilename=|DataDirectory|DataContext.mdf"
  providerName="System.Data.SqlClient" />


Test etmedim, ama bu muhtemelen işe yaramaz. Çünkü DataDirectoryzaten yerel olarak ayarlandığında App_Dataaçıkça önce değiştirdiğim için çok sürece, varsayılan olarak, kod hiçbir şey yapmaz.
Shimmy Weitzhandler

Bu yaklaşıma devam ederseniz, dizini değiştirmeyin, MDF dosya adını değiştirin. Ayrıca, bkz. Romiller.com/2013/05/17/…
RickAndMSFT

0

Bağlantı dizesinde DataBase adını yeniden adlandırarak düzeltebilirim, varsayılan aspnet- {numbers} 'den basit bir ada kadar çalıştı.


0

Sql sunucu yönetim stüdyosunu kullanarak (LocalDb) \ v11.0'a bağlanın, db'yi silin ve sonra paket yöneticisi konsolunda bir güncelleme veritabanı yapın.


0

Ben de aynı problemi yaşadım. Paket yöneticisi konsolunda aşağıdaki komutları çalıştırdım ve sorunu düzeltti

sqllocaldb.exe stop MSSqlLocalDb

sqllocaldb.exe delete MSSqlLocalDb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.