Bir varlık çerçeve nesnesim var ve bunu projeme connectionstring
eklediğimde app.config, connectionstringbölümüne ekleniyor , ancak yeni oluşturmak entitycontextve 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, connectionstringbölümüne ekleniyor , ancak yeni oluşturmak entitycontextve kullanmak istediğimde connectionstring, bu hata görünüyor
Yanıtlar:
Sorununuzun çözümünüzde birden fazla projeniz olduğundan ve edmxdosyalar dahil olmak üzere varlık çerçeve öğelerinizi içeren sorunun çözümlerin başlangıç projesi DEĞİLDİğinden şüpheleniyorum . Bu durumda, EF app.configprojesinde 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.configweb 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ızcaedmxdosyasını açın, yüzeyini sağ tıklayın, özellikleri seçin ve bağlantı dizesini kopyalayın ve app.configBağ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 connectionstringsin app.configve web.configaynı olduğundan emin olmaktır . Sonra .edmxtabloları 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 ConceptualEntityModelVarlı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 .edmxadı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/advertiseryoksa hata görünür /admin.
Tek yaptığım hatamda boş bir admindizin .../intepub/wwwrootoluş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 stringsize librariessen gibi DB erişebileceğiniz app.configve 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).