anahtar kelime desteklenmiyor veri kaynağı


82

Varsayılan üyelik veritabanına sahip bir asp.net-mvc uygulamam var. Ona ADO.NET Entity Framework ile erişiyorum.

Şimdi onu IIS'ye taşımak istiyorum, ancak birkaç sorun ortaya çıktı. SQL Server Management Studio'yu kurmam, yeni DB oluşturmam, önceki .MDF dosyasından tüm verileri oraya aktarmam gerekiyordu. Yapılması gereken tek şey (bildiğim kadarıyla) bağlantı dizesini değiştirmek. Ancak, bu konuda pek tecrübeli değilim ve Anahtar Kelime desteklenmiyor: 'veri kaynağı' almaya devam ediyorum. istisna. İşte bağlantı dizim:

<add name="ASPNETDBEntities" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.EntityClient" />

Herhangi bir fikir, sorun ne?


Yanlış başlangıç ​​projesini seçtiğimde bu hatayı yaşadım, bu yüzden VS bağlantı dizelerimi bulamadı. App.config ile bir başlangıç ​​projesinin seçildiğinden emin olun.
wnbates

Yanıtlar:


147

Sahip olduğunuz şey geçerli bir ADO.NET bağlantı dizesidir - ancak bu geçerli bir Entity Framework bağlantı dizesi DEĞİLDİR .

EF bağlantı dizesi şunun gibi görünür:

<connectionStrings> 
  <add name="NorthwindEntities" connectionString=
     "metadata=.\Northwind.csdl|.\Northwind.ssdl|.\Northwind.msl;
      provider=System.Data.SqlClient;
      provider connection string=&quot;Data Source=SERVER\SQL2000;Initial Catalog=Northwind;Integrated Security=True;MultipleActiveResultSets=False&quot;" 
      providerName="System.Data.EntityClient" /> 
</connectionStrings>

EF bağlantı dizenizdeki tüm metadata=ve providerName=öğelerini kaçırıyorsunuz ...... temelde yalnızca provider connection stringparçada bulunanlara sahipsiniz .

EDMX tasarımcısını kullanmak, web.config veya app.config dosyanızda sizin için geçerli bir EF bağlantı dizesi oluşturmalıdır.

Marc

GÜNCELLEME: Tamam, ne yapmaya çalıştığınızı anlıyorum: Yalnızca ASP.NET kullanıcı / üyelik veritabanı için ikinci bir "ADO.NET" bağlantı dizesine ihtiyacınız var. Diziniz tamam, ancak providerName yanlış - "System.Data.SqlClient" olması gerekir - bu bağlantı ENtity Framework kullanmaz - o zaman bunun için "EntityClient" öğesini belirtmeyin!

<add name="ASPNETMembership" 
     connectionString="Data Source=MONTGOMERY-DEV\SQLEXPRESS;Initial Catalog=ASPNETDB;Integrated Security=True;" 
     providerName="System.Data.SqlClient" />

providerName=System.Data.EntityClient==> Entity Framework bağlantı dizesini belirtirseniz (metadata = ve her şeyle).

Tüm EF eklemeleri olmadan providerName=System.Data.SqlClient==> düz ADO.NET SQL Server bağlantı dizesine ihtiyacınız varsa ve belirtiyorsanız


Aslında oldu, ama sonra "C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf" fiziksel dosyasını açamıyorum istisnasını alıyorum. İşletim sistemi hatası 5: "5 (bu hata için metin alınamadı. Nedeni: 15105)". C: \ OVSS \ Stavicky \ trunk \ Stavicky \ App_Data \ aspnetdb.mdf dosyası için otomatik adlandırılmış bir veritabanı ekleme girişimi başarısız oldu. Aynı ada sahip bir veritabanı var veya belirtilen dosya açılamıyor ya da UNC paylaşımında bulunuyor. Bazı kaynaklardan, bunun yanlış olduğunu düşündüm .. Yine de teşekkürler.
Trimack

İkinci bağlantı dizesi sorununu anladığımdan emin değilim. Tasarımcı tarafından oluşturulmuş olana izin vermeli ve bana yazdığınız ASPNET Üyeliğini eklemeliyim?
Trimack

Varlıklarınız EDMX tasarımcısında varsa - bunlara bir "EntityClient" ve bir EF bağlantı dizesi aracılığıyla erişilmesi gerekir. "Kullanıma hazır" ASP.NET üyelik sistemini kullanıyorsanız, bu EF modelinizin bir parçası DEĞİLDİR , bu nedenle ASP.NET üyelik veritabanınız için bir bağlantı dizesi oluşturduğunuzda, "EntityClient" i sağlayıcı - SqlClient kullanın.
marc_s

Öyleyse evet - ikisine de ihtiyacınız var - EDMX sisteminizin sizin için oluşturduğu EF bağlantı dizesi, ARTI ASP.NET üyelik sistemi için ikinci bir - normal ADO.NET bağlantı dizesi -.
marc_s

1
Gönderinize 100. ek oy verdim. Mutlu Noeller :)
RBT

7

Bu sorun, web.config (veya app.config) bağlantı dizelerinize dizine göre başvurduğunuzda ortaya çıkabilir ...

var con = ConfigurationManager.ConnectionStrings[0].ConnectionString;

Sıfır tabanlı bağlantı dizesi, varsayılan olarak diğerlerini yığının üst kısmından devraldığı için yapılandırma dosyanızdaki her zaman değildir .

Önerilen yaklaşımlar, bağlantınıza adla erişmektir ...

var con = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;

veya önce yapılandırma dosyanızdaki connnectionStrings öğesini temizlemek için ...

<connectionStrings>
    <clear/>
    <add name="MyConnection" connectionString="...

2

Ben de aynı sorunu yaşıyordum.
ama bu kod işe yarıyor, deneyin.

<add name="MyCon" connectionString="Server=****;initial catalog=PortalDb;user id=**;password=**;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />

0

Entity Framework kullanmaya başladığımda bu sorunu yaşadım, eski SQL sunucu bağlantısını EntityFrameWork bağlantısı olarak değiştirmediğimde oldu.

Çözüm: bağlantının web.config dosyası "add name =" Varlıklar "connectionString = XYZ" aracılığıyla yapıldığı dosyada , doğru bağlantıya başvurduğunuzdan emin olun, benim durumumda bunu yapmak zorundaydım

        public static string MyEntityFrameworkConnection
    {
        get
        {
             return ConfigurationManager.ConnectionStrings["Entities"].ConnectionString;
        }

    }

bağlantının kurulması gerektiğinde MyEntityFrameworkConnection'ı arayın.

private string strConnection= Library.DataAccessLayer.DBfile.AdoSomething.MyEntityFrameworkConnection;

not: çözüme Varlık modeli eklendiğinde web.config dosyasındaki bağlantı otomatik olarak oluşturulacaktır.


0

Bunun eski bir gönderi olduğunu biliyorum ama son zamanlarda aynı hatayı aldım, bu yüzden değeri ne olursa olsun, işte başka bir çözüm:

Bu genellikle bir bağlantı dizesi hatasıdır, lütfen bağlantı dizenizin biçimini kontrol edin, "varlık çerçevesi bağlantı dizesi" ni arayabilir veya yukarıdaki önerileri uygulayabilirsiniz.

Ancak, benim durumumda bağlantı dizem iyiydi ve hata tamamen farklı bir şeyden kaynaklanıyordu, bu yüzden umarım bu birine yardımcı olur:

  1. İlk önce bir EDMX hatasıyla karşılaştım : EDMX'te yeni bir veritabanı tablosu vardı ve bu tablo veritabanımda mevcut değildi (komik olan şey, hatanın çok açık olmaması, çünkü bunun yerine EDMX'imde veya çıktı penceremde gösterilmiyordu. Visual Studio'da, 'Uyarılar' altında 'Hata Listesi' penceresine gizlenmiştir). Eksik tabloyu veritabanıma ekleyerek bu hatayı çözdüm. Ancak, aslında bir saklı yordam eklemeye çalışmakla meşguldüm ve hala 'veri kaynağı' hatası alıyordum, bu yüzden nasıl çözdüğüme bakın:

  2. Depolanan prosedür hatası : Depolanan bir prosedür eklemeye çalışıyordum ve bunu EDMX tasarım penceresi aracılığıyla her eklediğimde bir 'veri kaynağı' hatası alıyorum. Çözüm, saklı yordamı boş olarak eklemekti (depolanan işlem adını ve bildirimini sakladım, ancak depolanan işlemin içeriğini sildim ve onu '1'i seç' ile değiştirdim ve EDMX'e eklemeyi yeniden denedim). İşe yaradı! Muhtemelen EF, depolanan proc'umdaki bir şeyi beğenmedi. Proc'u EF'e ekledikten sonra, veritabanımdaki proc içeriğini olmasını istediğim şekilde güncelleyebildim ve çalışıyor, 'veri kaynağı' hatası çözüldü.

tuhaflık


0

Aynı hatayı alıyordum, ardından bağlantı dizimi aşağıdaki gibi güncelledim

<add name="EmployeeContext" connectionString="data source=*****;initial catalog=EmployeeDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

Bunu deneyin, sorununuzu çözecektir.

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.