Uygulama yapılandırma dosyasında 'MyEntities' adlı bağlantı dizesi bulunamadı


246

Bir uygulama oluşturmak için varlık çerçevesi ve ASP.NET MVC 4 kullanıyorum

Benim çözümüm iki projeye ayrıldı;

  • Veri modeli (.edmx) dosyamı ve birkaç özel arabirimi içeren bir sınıf kitaplığı
  • Yukarıdaki sınıf kitaplığına başvuran 'container' MVC projesi

Benim sorunum 'MyEntites' DbContext kullanmaya çalıştığınızda ben aşağıdaki hatayı olsun:

Uygulama yapılandırma dosyasında 'MyEntities' adlı bağlantı dizesi bulunamadı.

Sorunun bağlantı dizesinin MVC projesi yerine sınıf kitaplığının app.config içinde olması gerçeği ile ilgili bir şey var sanırım.

Kimsenin önerisi var mı?


15
Sizinkiyle tam olarak aynı bağlamda değil (EF6 ile otomatik geçişler), ancak TFS'de bir çocuk dalı oluşturup üzerinde çalışmaya başladığımda benzer hata mesajıyla aynı sorunu yaşadım. Mvc projesini başlangıç ​​projesi olarak işaretlemek bunu çözdü. çıktı 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).
Mekanik Nesne

Yanıtlar:


309

Bağlantı dizesini MVC projesindeki .config dosyasına kopyalamayı deneyin.


63
Mükemmel çalışıyor ancak başvurulan projenin neden bağlantı dizesini almak için kendi yapılandırma dosyasını kullanmadığını bilmek ister.
Null Head

7
@Alexander Eski soru ama evet, ben de nedenini bilmek istiyorum.
Kehlan Krumme

22
@Alexander, çerçeve yükler ve yürütme derleme için yapılandırma dosyalarını kullanır. Bu durumda, bu web projesi. Sınıf kütüphanelerinin genellikle kendi yapılandırma dosyaları yoktur.
2014

24
NuGet COnsole bağlamında çalıştırıldığında Enable-Migration komutları, başlangıç ​​projeleri olacağını düşündüğünüz projeye değil, Başlangıç ​​Projeleri yapılandırma dosyasına bakar. Projeyi, başlangıç ​​olmasını istediğiniz app.config ile ayarlayın. projesi. İsteğe bağlı olarak, daha sonra, bir yapılandırma dosyasında bağlantı dizeleri Mağaza <connectionString ConfigSource = "../ ProjectDir / SharedConnections.config" /> diğer projelerde bunlara başvuruda
Ryan Mann

3
Bu tam hata iletisini aldım, ancak .config dosyam - doğru projede - gerçekten doğru bağlantı dizesini listeledi. Ancak, dönüşümleri kullanıyordum ve bağlantı dizesi elbette dönüştürülmüş .config dosyasında başvurulmadı. Yapılandırma dosyası dönüşümleri kullanıyorsanız, bu dikkat edilmesi gereken bir şeydir.
Morten Nørgaard

143

Haklısınız, bunun nedeni sınıf kitaplığının (.edmx dosyası) başlangıç ​​/ ana projeniz olmamasıdır.

Bağlantı dizesini ana proje yapılandırma dosyasına kopyalamanız gerekir.

Başlangıç ​​/ ana projenizin bir yapılandırma dosyası yoksa (Konsol Uygulaması durumumda olduğu gibi) sadece bir tane ekleyin (Başlangıç ​​projesi - Yeni Öğe Ekle -> Uygulama Yapılandırma Dosyası).

Daha alakalı bilgiler burada bulunabilir: MetadataException: Belirtilen meta veri kaynağı yüklenemedi


8
Bunun en önemli cevabı sınıf kütüphanesinin (.edmx dosyasının olduğu yerde) STARTUP projeniz olmamasıdır. Başlangıç ​​projemin web.config dosyasını içeren projeye ayarlanmadığını fark ettim. Farklı bir app.config içeren bir konsol uygulamasıydı. Web çözümünüze konsol uygulamaları ekliyorsanız, güncelleme veritabanını çalıştırdığınızda web projenizin başlangıç ​​projesi olduğundan emin olun!
Karl

1
Ana projemi bir nedenden dolayı kaldırdım ve yeniden yükledikten sonra taşıma eklemeye çalışırken bu hatayı aldım. Ana proje başlangıç ​​projesinin tekrar yapılması sorunu çözdü. Thanks @Oren
Azadrum

2
Başlangıç ​​projem yanlışlıkla değiştirilmişti. Anahtar nokta bu. Cevabınız gerçekten yardımcı oldu!
Fabio Milheiro

98

projenizi (DbContext ile) başlangıç ​​olarak yaptığınızdan emin olun

proje üzerinde sağ tıklayın ve seçin

VEYA

Başlangıç ​​olarak ayarlanan projeye app.config'de (veya web.config) bağlantı dizenizi ekleyin

VEYA

Komutu böyle çağır

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'

Sonra tekrar dene


2
Aslında proje, başlangıç ​​dizesi olarak ayarlanması gereken bağlantı dizesini içerir ve genellikle DbContext dosyanızın oturduğu proje değildir
Raymond Wang

1
... bu nedenle, Mgr Paketinin doğru katmanı hedeflediğinden emin olmanın yanı sıra, Set as Startup Projectyukarıda gösterilen ekran görüntüsüne göre aynı katmanın olması gerekir . (F5 tuşuna
bassanız bile

3
Bu hayatımı kurtardı. Paket Yöneticisi'nde varsayılan proje bağlamın ayarlandığı projeye ayarlanmış olsa da, yine de geçersiz kılmadı.
garfbradaz

1
"Ama dün işe yaradı! Aynı komut !" => BU!
Simon_Weaver

1
En kolay yol =)
Alexandr

29

Sadece bağlantı dizesini geçip EntityFrameworkhayatınıza devam edebilirsiniz:

public partial class UtilityContext : DbContext
{
    static UtilityContext()
    {
        Database.SetInitializer<UtilityContext>(null);
    }

    public UtilityContext()
        : base("Data Source=SERVER;Initial Catalog=DATABASE;Persist Security Info=True;User ID=USERNAME;Password=PASSWORD;MultipleActiveResultSets=True")
    {
    }

    // DbSet, OnModelCreating, etc...
}

ve günümü de yaptım çünkü başlangıç ​​projemin neden aniden config dosyasını bulmaya bir çözüm bulamadım. Benim app.config ve <appname> .exe.config benim başlangıç ​​proje bölmesinde görünüyordu, ancak EntityFramework sonsuza kadar kullandığım bağlantı dizesini bulamadı. Son zamanlarda bir dizi kullanılmayan projeyi çözümden kaldırdım ve bunun bununla bir ilgisi olup olmadığını merak ediyorum. Bir web projesini çözümden kaldırdım. Diğer projelerimin web.config dosyasına veya bunun gibi sıra dışı bir şeye güvenip güvenmediğini merak ediyorum.
GrayDwarf

Çalışan projenin yapılandırması diğer tüm alt projeler tarafından kullanılır.
Serj Sagan,

1
ancak sağlayıcı adı nasıl ayarlanır?
FizxMike

9

Tahmin edeceğiniz gibi, bağlantı dizesi sınıf kitaplığının app.config dosyasında yer alır.

Girdiyi app.config sınıfından kapsayıcının app.configveya web.configdosyaya kopyalayın


8

Çözümde birden fazla projeniz varsa, gerçeği App.config'iniz olduğu yerde projeyi başladığınız şekilde ayarlayın.


7

" Proje Olarak Ayarla" olarak ayarlanmış projedeki bağlantı dizesini app.configveya web.configdosyayı kopyalayın StartUpve veri katmanı projesinde varlık çerçevesinin kullanılması durumunda - lütfen ana projeye varlık çerçevesi nugetini yükleyin .


4

Başlangıç projesi ise de olurdu hep değişti birine gelmez sahip bağlantı dizeleri .

  1. Sağ Tıklama Çözümü - tıklama özellikleri
  2. Ortak Özellikler altında başlangıç ​​projesini seçin
  3. Sağ bölmede bağlantı dizelerine sahip projeyi seçin (çoğu durumda MVC projeleri olacaktır - çözümü başlatan proje)

Evet çalışıyor. EF'nin DB ile iletişim kurması için bir sınıf kütüphanesi oluşturdum ve aynı sorunu alıyordum.
Satinder Sidhu

4
  1. App.Config dosyası ekleme
  2. Projeyi başlangıç ​​projesi olarak ayarlayın.
  3. Bağlantı dizelerini entityFrameworkbölümden sonra eklediğinizden emin olun :

    <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
    
    </configSections>
    
    <connectionStrings>
       <!-- your connection string goes here, after configSection -->
    </connectionString>

3

Evet, saçma. Bir bağlantı oluşturucu kullanarak bağlantı dizesini kopyalamaktan kaçınabilirsiniz. VB.Net kodu (üretimde kullanılır, ancak burada biraz değiştirilmiş, bu nedenle test edilmemiş, herhangi bir sorunla yardımcı olmaktan mutluluk duyarız), burada bir serverName değişkeni, bir databaseName değişkeni var, bunları bir yönteme geçiriyorum ve bağlantı oluşturmasını sağladım benim için:

    Dim EfBuilder As New System.Data.EntityClient.EntityConnectionStringBuilder("metadata=res://*/VMware.VmEf.csdl|res://*/VMware.VmEf.ssdl|res://*/VMware.VmEf.msl;provider=System.Data.SqlClient;provider connection string=""data source=none;initial catalog=none;integrated security=True;multipleactiveresultsets=True;App=EntityFramework""")
   Dim SqlBuilder As New Data.SqlClient.SqlConnectionStringBuilder(EfBuilder.ProviderConnectionString)
                        SqlBuilder.DataSource = serverName
                        SqlBuilder.InitialCatalog = databaseName
                        EfBuilder.ProviderConnectionString = SqlBuilder.ConnectionString
                        Using vmCtx As New VmEfConn(EfBuilder.ConnectionString)

2

çözümünüzde birden fazla proje mi kullanıyorsunuz?

Çünkü öyleyse, kontrol etmeniz gereken web yapılandırması de .edmx dosyasıyla aynı projedeki


Evet, durum böyle. Bağlantı dizesini içeren proje, yalnızca bir App.config dosyası içeren bir sınıf kitaplığıdır. MVC projesi bu tho kontrol gibi görünmüyor.
jjc99

geliştirme sırasında sadece app.config projesinde chech olacak, orada eklemek gerekir
Diego

Cevabınız için teşekkürler. Bağlantı dizesini edmx dosyasını içeren projeden kopyalamayı ve MVC projemdeki kök web.config dosyasına yerleştirmeyi denedim. Ne yazık ki, hala bağlantı dizesini bulamıyor. Bağlantı dizesini herhangi bir şekilde değiştirmem gerekiyor mu?
jjc99

Öteki yol bu. Dev zaman içinde .edmx dosyasını içeren proje üzerinde app.cofnig con dizesi gerekir. Eğer varsa, belki isim yanlıştır. Bağlantı dizesinin adı, .edmx dosyanızın "varlık içerme adı" özelliğiyle aynı ad olmalıdır
Diego

1

MVC Project Web.config dosyasına ConnectionString ekleyin


1

Birden fazla proyect, başlangıç ​​proyect web.config ve app.config EntityFramework projesi için kullandığımda bu sorun yaşadım.

bu problemden kaçınmak için:

  1. Başlatılan * .config dosyasında bağlantı dizesine ihtiyacınız vardır.
  2. EntityFramework DLL başvurularınız yüklemiş olması gerekir

1

Aynı sorunla karşılaştım. Diğer katmandan veri erişim işlemi gerçekleştirirken başlangıç ​​projesine bağlantı dizesi koymak için kaçırıldım. ayrıca başlangıç ​​projenizde app.config yoksa, app.config dosyasını ekleyin ve ardından bu yapılandırma dosyasına bir bağlantı dizesi ekleyin.


1
Teşekkürler, proje yükleme ile ilgili bir sorun vardı ve "Başlangıç ​​Projesi" kaybetti. Cevabınız bana Context dosyası ve app.config içeren projenin Başlangıç ​​olduğundan emin olmamı hatırlattı.
Mastro

1

Bunu, başka bir cevapla belirtildiği gibi, projeyi başlangıç ​​olarak ayarlayarak elde ettim. Buna katkım - Add-Migrations ve Update-Database yaparken, başlangıç ​​projesini Nuget Package Manager Console'daki komutun bir parçası olarak belirtin ('[' veya ']' karakterlerini dahil etmeyin, sadece size orada bulunan metni proje adınızla değiştirmeniz gerekir):

  1. Enable-Göçler
  2. Add-Migrations -StartupProject [veri içeriği sınıfını içeren proje adınız]
  3. Update-Database -StartupProject [yukarıdaki ile aynı proje adı]

Bunu yapmalı.


Bu şekilde komutları prosedürlerinize dahil edebilir ve başlangıç ​​projesini varsayılandan sürekli olarak değiştirmek zorunda kalmazsınız.
JakeJ

1

Bunun nedeni, bağlam sınıfınızın DbContext öğesinden devralınmasıdır. Sanýrým senin ţutorun böyle:

public MyEntities()
    : base("name=MyEntities")

name=... bağlantınızın adı değiştirilmeli


0

.Edmx dosyasını içeren proje tarafından oluşturulan bağlantı dizesi, bağlantı dizesini oluşturur; bu, çıkış dizinine kopyalanan ve çalışma zamanı yapılandırma bilgilerini depolamak için yürütülebilir dosya tarafından başvurulan app.config dosya türlerinden bir bekletme gibi görünür.

Web projesi için web.config dosyasına rasgele .config bilgileri eklemek için otomatik bir işlem olmadığından bu web projesinde kırılır.

En kolayı bağlantı dizesini yapılandırma dosyasından web.config dosyasının bağlantılar bölümüne kopyalamak ve yapılandırma dosyasının içeriğini yok saymaktır.


0

Bunu ele almanın en iyi yolu, bu projeyi (büyük olasılıkla bir sınıf kütüphanesi) başlangıç ​​projesine geçici olarak ayarlamaktır. Bu, paket yöneticisi konsolunu bu projeyi yapılandırma kaynağı olarak kullanmaya zorlar. Bu şekilde ayarlanmasının bir nedeni, econfig dosyalarının genellikle takip ettiği yukarıdan aşağıya modelidir. Temel kural, istemciye en yakın projenin (örneğin MVC uygulaması) kullanılacak web.config veya app.config olmasıdır.


0

Bağlantı dizesini başlangıç ​​projesinin ROOT web.config dosyasına yerleştirdiğinizden emin olun.

Burada bariz olduğunu söylemek biraz biliyorum, ama benim de oldu - zaten zaten MVC projenin Web.Config (.edmx dosya farklı bir sınıf kütüphanesi projesinde yerleştirildi) bağlantı dizesini HAD rağmen ve ben yapamadım Neden bir istisna almaya devam edemiyorum ... Uzun hikaye kısa, bağlantı dizesini yanlışlıkla Views \ Web.Config dosyasına, yorgunluğun garip bir kombinasyonu ve alt-kaydırmama - çözüm-kaşif senaryosu. Evet, bu şeyler deneyimli geliştiricilere de oluyor :)


0

Bu sorun, projenizde katmanları kullanıyorsanız ve DataLayer'da varlık çerçevesi çalışması tanımlanmış veya yüklüyse ve projenizi çalıştırmaya çalıştığınızda oluşur

Bu sorunun üstesinden gelmek için bağlantı dizesini Edmx dosyasının bulunduğu katmandan kopyalayın ve bağlantı dizesini ana web.config dosyasına yapıştırın.


0

Sınıf kitaplığına aşağıdaki şekilde başvuran 'container' MVC projesinin kök web.config dosyasına bir bağlantı dizesi ekleyin:

 <connectionStrings>

  <add name="MyEntities" connectionString="complete connection string here" providerName="System.Data.SqlClient" />

  </connectionStrings>

Bağlantı adı olarak "MyEntities" kullanmak istemiyorsanız, istediğiniz gibi değiştirin ancak MyEntities DbContext sınıfınızda aşağıdaki değişikliği yapın:

MyEntities: DbContext
 {
   public MyEntities():base("Name-Of-connection-string-you wish to connect"){ }
 }

Bu hatanın nedeni, bağlantı dizesinin adını belirtmezsek veya türetilmiş DbConext sınıfında bağlanırsak (sizin durumunuz MyEntities ise) DbContext otomatik olarak kök web.config dosyasında bir bağlantı dizesi arar. türetilmiş sınıf adıyla aynı (Sizin durumunuzda Varlıklarım).


0

Bu sorunu MSTest çalıştırırken yaşadım. Ben "noisolation" bayrağı olmadan çalışmak için alamadım.

Umarım bu birine yardımcı olur. Bunu çözmem için bana çok zaman harcadı. Her şey IDE'den iyi geçti. Bu bağlamda Varlık Çerçevesi hakkında garip bir şey.


0

Düzenli taşıma işlemleri

İki seçenek vardır - burada herkesin önerdiği ilk bağlantı bağlantı dizesinin projenin Web.config dosyasında olmasını sağlamaktır. Azure uygulama ayarlarından bağlantı dizeleriyle çalışırken, Web.config değerlerinizin Azure değerleriyle üzerine yazılması anlamına gelir.

Azure veya otomatik taşıma (programlı)

Taşıma işlemlerini programlı olarak çalıştırıyorsanız, geçişleri Web.config dosyasına kaydetmeden dinamik olarak (veya Azure uygulama ayarları aracılığıyla) alınan bir bağlantı dizesi kullanarak çalıştırmanıza olanak tanıyan ikinci bir seçenek vardır:

Yapılandırmanın TargetDatabase'i ayarlarken , yalnızca bir bağlantı adı alan yapıcı yerine bir bağlantı dizesi ve bir sağlayıcı adı alan DbConnectionInfo yapıcısını kullanın . Bağlantı dizenizin sağlayıcı adı yoksa ve SQL Server / Azure SQL kullanıyorsanız "System.Data.SqlClient" kullanın


0

Bu aynı zamanda yeterli dll başvuruları arama kodunda başvurulan sonuçlanabilir. Küçük bir beceriksiz kesmek gününüzü kurtarabilir.

DB First yaklaşımını izliyordum ve DAL Sınıfı kütüphane projesinde EDMX dosyasını oluşturmuştum ve bu da WCF servisi tarafından başvurulan BAL Sınıfı kütüphanesine başvuruyordu.

BAL'de bu hatayı aldığımdan, DAL projesinin App.config dosyasından yapılandırma ayrıntılarını kopyalamak için yukarıda belirtilen yöntemi denedim, ancak çözmedim. Nihayetinde bir arkadaşın ucu ile WCF projesine (ilgili DB Bağlantısı vb.) Bir kukla EDMX dosyası ekledim, bu yüzden gerekli her şeyi içe aktardım ve sonra sadece EDMX dosyasını sildim ve sorundan kurtuldum temiz bir yapı.


0

@RyanMann'ın en üstteki cevabı hakkında şunları söyleyen bir yorum var :

Bağlantı dizelerinizi bir yapılandırma dosyasında saklayın, ardından diğer projelerde <connectionString configSource="../ProjectDir/SharedConnections.config" />

Bu harika bir öneri!

Ayrıca, App.config ve Web.config dosyaları arasında bağlantı dizelerini paylaşmak için çalışır!

Bu öneriyi takip etmek isteyen herkes, bu SO cevabına yönelmelidir. . Bir çözümde birden fazla proje arasında bağlantı dizelerini paylaşma konusunda gerçekten harika bir adım adım kılavuz vardır.

Tek uyarı, configSourceaynı dizinde veya bir alt dizinde bulunması gerektiğidir. Yukarıdaki bağlantıda, bu sorunu çözmek için "Bağlantı Olarak Ekle" nin nasıl kullanılacağı açıklanmaktadır.


0

Bir AutoCAD eklentisi içinde EF kullanmaya çalışırken bu hatayla karşılaştım. CAD eklentileri bağlantı dizesini acad.exe.config dosyasından alır. Yukarıda belirtildiği gibi bağlantı dizesini acad config dosyasına ekleyin ve çalışır.

Kredi ADN.Network'ten Norman.Yuan'a gidiyor.


0

Bir MVVM modeli kullanıyorsanız, bağlantı dizelerini projenizin tüm bölümlerine kopyalamayı deneyin.

Örneğin, çözümünüz sınıf kütüphanesi projesi ve wpf projesi olmak üzere iki proje içeriyorsa, arka uç projesinin bağlantı dizelerini (kütüphane sınıfı porject) kopyalamanız ve bir kopyasını wpf projesinin App.config dosyasına yerleştirmeniz gerekir.

<connectionStrings>
  <add name="DBEntities" ... />
</connectionStrings>

Umarım sizin için yararlıdır :)


-2

Web.config dosyasına Connectoinstrnig ekleyin

<ConnectionStiring> <add name="dbName" Connectionstring=" include provider name too"  ></ConnectionStiring>
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.