Bir varlık çerçeve nesnesim var ve bunu projeme connectionstring
eklediğimde app.config
, connectionstring
bölümüne ekleniyor , ancak yeni oluşturmak entitycontext
ve kullanmak istediğimde connectionstring
, bu hata görünüyor
Bir varlık çerçeve nesnesim var ve bunu projeme connectionstring
eklediğimde app.config
, connectionstring
bölümüne ekleniyor , ancak yeni oluşturmak entitycontext
ve kullanmak istediğimde connectionstring
, bu hata görünüyor
Yanıtlar:
Sorununuzun çözümünüzde birden fazla projeniz olduğundan ve edmx
dosyalar dahil olmak üzere varlık çerçeve öğelerinizi içeren sorunun çözümlerin başlangıç projesi DEĞİLDİğinden şüpheleniyorum . Bu durumda, EF app.config
projesinde bağlantı dizesi mevcut olsa bile , CLR bunu çalışma zamanında bulamaz. Örneğin, çözümünüzde bir web siteniz ve bir EF projeniz varsa, bağlantı dizesini EF projelerinden app.config
web sitenize kopyalamanız gerekir web.config
. Temel olarak, herhangi bir bağlantı dizesi verisi .Net iş parçacıklarının CLR (yani başlangıç projeniz) tarafından başlatıldığı projenin yapılandırma dosyasında bulunmalıdır. Bu sizin durumunuz değilse, yalnızcaedmx
dosyasını açın, yüzeyini sağ tıklayın, özellikleri seçin ve bağlantı dizesini kopyalayın ve app.config
Bağlantı Dizesi bölümünüze yapıştırın . Bu şekilde, yapılandırmanızda doğru olana sahip olduğunuzdan emin olabilirsiniz.
DÜZENLEME:
Burada ObjectContext Constructor üzerinde Dokümantasyon üzerinde görebileceğiniz gibi
, ilk parametre EDM'nizi oluşturduğunuzda oluşturulan kod oluşturan linkstring adıdır. Bir şekilde, bağlantı kurma adınızın adı değişirse, yapmanız gereken tek şey modelinizi sağ tıklayıp "Modeli Veritabanından Güncelle ..." yi seçmek ve ardından bunu yansıtacak şekilde güncelleme ve tasarımcınızı güncellemek için sihirbazı takip etmek değişiklik.
App.config dosyasındaki bağlantı dizesini web.config dosyasına kopyalamanız veya tüm dosyayı çıktıyı görüntüleyen projeye kopyalamanız gerekir. Çerçeveyi tüketme şartlarından biridir.
Benim çözümde birden çok proje tarafından kullanılacak bir .dll benim özel veritabanı mantığı koymak çalıştığımda bu sorunla karşılaştı.
.Dll dosyası doğru app.config dosyasına sahip olsa da çalışmadı. Varlık çerçeveleri, .exe uygulamasının app.config dosyasındaki bağlantı bilgilerini istedi. Bilgilerin buraya kopyalanması gayet iyi çalıştı.
Morteza'nın bağlantı dizesini doğrudan .edmx'e yapıştırma çözümü benim için işe yaramadı, çünkü değeri oraya yapıştırmama izin vermedi - tam olarak yapmak istediğim şey buydu.
Merhaba ben bu sorunu vardı ve bu beni deli ediyordu. Neyse sonunda sorunun ne olduğunu anladım. Yapmanız gereken ilk şey connectionstrings
in app.config
ve web.config
aynı olduğundan emin olmaktır . Sonra .edmx
tabloları görebilmek için dosyaya çift tıklamanız gerekir . Bir kez u tabloların yakınında herhangi bir yere tıklayın ama tablolara değil ve özelliklere gidin. Açılır listeden ConceptualEntityModel
Varlık Kabı Adı'nı seçin ve arayın ve iyi hatırlayın.
Sonra edmx dosyasının tasarımcısına gidin ve kurucuları açın. (tasarımcı edmx dosyasının alt klasörüdür) yapıcıların BASE parametresinde iki parametresi olmalıdır
public DBEntities() : base("name=DBEntities", "DBEntities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
bu onlardan biri. ilk parametre dosyanın içinde bulunduğu proje dosyasının .edmx
adına sahip olmalıdır. İkinci parametre, daha önce bahsettiğim özelliklerden varlık konteyneri adının adına sahip olmalıdır. tüm kurucuları aşağıdakilerle düzenlemeyi unutmayın:base("", "")
En azından bu benim sorunumdu ve sorunum böyle çözüldü. Umarım sizinkini bu şekilde çözmeyi başarırsınız.
Bu konuda hiç kimsenin örtmediği bir varyasyon vardı.
Birkaç model içeren bir ana projem ve birim testleri içeren bir Test Projem vardı. Test Projesi çalışıyordu, ancak daha sonra OP'de belirtilen hatayla durdu. EDMX dosyasını yeniden adlandırmam veya taşımamamıştım.
Bir çok tavsiye .config dosyalarını karşılaştırmaktan bahsetti, ancak projemde hiç yoktu.
Sonunda, ana projedeki app.config dosyasını test projeme kopyaladım ve işe yaradı. Bu doğru adım mı, yoksa ek modeller eklendiğinde sürdürülebilirlik sorunları mı sunacak, bilmiyorum, ama en azından birim testlerim şimdi tekrar doğru çalışıyor.
Her ne kadar Murtaza Manavinin' cevabı bu sorunu çözmek gelmez, başka bir çözüm dinamik bağlantı dizesi oluşturmak ve ObjectContext için yapıcı içine geçmektir:
public static string CreateConnectionString()
{
var assemblyPath = Assembly.GetExecutingAssembly().Location;
string assemblyLocation = Path.GetDirectoryName(assemblyPath);
string dbPath = Path.Combine(assemblyLocation, "YourDatabase.sdf");
var sqlBuilder = new SqlConnectionStringBuilder { DataSource = dbPath };
var entityBuilder = new EntityConnectionStringBuilder
{
ProviderConnectionString = sqlBuilder.ConnectionString,
Provider = "System.Data.SqlServerCe.3.5",
Metadata = @"res://*/YourModel.csdl|
res://*/YourModel.ssdl|
res://*/YourModel.msl"
};
return entityBuilder.ToString();
}
// Snip...
var entityContext = new YourObjectContext(CreateConnectionString());
Bu, bağlantı dizesi bilgilerinin, en azından benim durumumda arzu edilmeyen başlangıç projenizin app.config dosyasına kopyalanması gereğini ortadan kaldırır.
Bağlantı dizesinde öznitelik olarak sağlayıcıAdı = "System.Data.EntityClient" eklemeyi unuttum. Bu, bu hatayla sonuçlandı.
<add name="connectionName" connectionString="metadata=res://*/..." providerName="System.Data.EntityClient" />
onun yerine
<add name="connectionName" connectionString="metadata=res://*/..." />
Ben sadece bir uygulama VS2010 Web sitesi kökünden iki düzey IIS oluşturulursa bu hata oluştu bulundu. Neden olduğundan emin değilim, daha fazla araştırma yapmamız gerekecek. Örneğin, uygulamanız bu yolda ise: IIS sitenizde sanal dizininiz /admin/advertiser
yoksa hata görünür /admin
.
Tek yaptığım hatamda boş bir admin
dizin .../intepub/wwwroot
oluştu.
Yukarıdaki adımı gerçekleştirene kadar hata ayıklamaya başlayamayacağınızı göreceksiniz.
Geçmişte ekibimizde bu sorunu yaşadık, hatırlamak biraz zaman aldı ama tam olarak bu şekilde düzelttik.
Daha güzel bir mimari kullanıyorum ve aynı problemi yaşıyorum ama bu bana yardım etsin. Umarım bu sana yardımcı olur. Önce aynı olması connection string
size libraries
sen gibi DB erişebileceğiniz app.config
ve web.config
sadece bir aşırı yüklenmiş yapıcı içinde .edmx (Model.context.cs) dosyası ekleyin sonra şimdi iki yapıcı bir varsayılan ve u sadece eklenen diğer bir (sahip olduğum aşırı).
public YourEntityName(string connString)
: base(connString)
{
}
EF ile de çalışmak istemeyen bir sınıf kütüphanem vardı. Ben app.config (ya da sadece connectionstring bölümü) sınıf kütüphanemden exe projesine kopyaladıktan sonra bağlantı iyi çalıştı! Muhtemelen yapılandırma dosyasının exe projesiyle aynı klasörde olması beklenir ve bu nedenle bulunamadı. Sınıf kütüphanesi projesinde bir yapılandırma dosyası kullanıldığında daima dikkatli olun!
Şey ... bu sorun da çok basit (aptal) bir nedenden dolayı olabilir ... Başka bir projeden bir dosya kopyaladım ve EntityDataSource üzerindeki ConnectionString'i değiştirmeyi unuttum ... projenin başında olduğum ve oldu giriş sayfasında, ben config bir şey olduğunu düşündüm, ama sadece yanlış bağlantı dize adı (ve DefaultContainerName).