19

Varolan bir veritabanına dayalı bir Varlık Çerçevesi modeli oluşturdum, ardından modelden POCO objeleri oluşturdum. Web.config'imdeki bağlantı dizesi Entity Framework değil, sadece standart bağlantı dizesidir (CSDL, SSDL, MSL referansları eksik).Kod İlk ve Veri Tabanı İlk

Başvurumu derlemek, ama ben çalıştırdığınızda bu hatayı alıyorum:

Code generated using the T4 templates for Database First and Model First development may not work correctly if used in Code First mode. To continue using Database First or Model First ensure that the Entity Framework connection string is specified in the config file of executing application. To use these classes, that were generated from Database First or Model First, with Code First add any additional configuration using attributes or the DbModelBuilder API and then remove the code that throws this exception


Sorum şu, nereye Poços oto kuşaktan geldi ve nasıl olabilir fark etmez benim kodunda Kod İlkesi gibi davranmamı sağlıyorum? Bağlantı dizgimde CSDL'ye başvurmak istemiyorum.

+0

, her ikisi de önce modeli ve kodu kullanmanız çok kötü ... – Serdar

+1

@Serdar - Mutlaka değil. Bilinen bir modelden kod üretmeye başlamak isteyebilir, ancak bu noktadan sonra, ilk önce kod kullanarak yeni kod yazmayı başlatın. –

+0

Sadece anladım :) üzgünüm ... – Serdar

cevap

23

Bağlantı dizesi meta verilere sahipse, EF bunun önce Model Önce veya Önce Veritabanı olduğunu düşünür. Düz bir bağlantı dizesiyse, EF ilk olarak Kod olduğunu düşünür. Ancak, ilk önce model yapmaya başlamak istiyorsanız, ancak EF'in gerçekten ilk önce kod yaptığınızı düşündüğünüzde (yaptığınız şey budur), varsayılan olanı değil, DbContext kod üretecini kullandığınızdan emin olun. Kod ilk POCO'lar gerçekten budur - "düz eski C# nesneleri" - özel bir veri tabanı, bunların içinde hiçbir şey izleyen veya bunları değiştiren bir özellik değildir. DbContext kod üretecini kullanmak için, model şemasına sağ tıklayın ve "Yeni kod oluşturma öğesi ekle ..." yi seçip ADO.NET DbContext Üreticisi'ni seçin. Ayrıca, birincil ve yabancı anahtarlarınızı nasıl adlandırdığınıza ve/veya basit int kimliğinden daha karmaşık olup olmadıklarına bağlı olarak, muhtemelen nesneleriniz arasındaki ilişkileri haritadaki "OnModelCreating" yöntemiyle eşleştirmek için bazı kodları doldurmanız gerekecektir. bağlamı. throw new UnintendedCodeFirstException(); hattını silin ve eşleme kodunuzla değiştirin. Aksi halde, EF tüm ilişkileri anlayamayabilir (güvenmek için hiçbir meta veri olmadığını unutmayın).

Bu yardımcı olur umarım. İlk Veritabanı kullanıyorum

<connectionStrings> 
<add name="<The name of your class>" 
    connectionString="metadata=res://*/<test>.csdl|res://*/<test>.ssdl|res://*/<test>.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=<your source>;initial catalog=<your db>;persist security info=True;user id=<your user id>;password=<your password>;multipleactiveresultsets=True;App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" /> 
</connectionStrings> 
+0

Cevabınız bana yardım etti. Ve ben sizin referans/yanıtı http://stackoverflow.com/questions/18674079/ef-5-0-database-first-model-not-working-on-one-table/18675388#18675388 Teşekkür ederim – HGMamaci

+0

@HGM Bu cevabı faydalı bulduğuna sevindim. –

12

Sen yapılandırma dosyasında aşağıdaki gerekir. Biri zaten var ama görünüşe göre farklı

+0

Merhaba John, Çok teşekkür ederim. Cevabınız benim için iyi çalıştı. –

+0

Eğer connectionString'inizi bir (localdb) veri kaynağından bir SQL veri kaynağına geçiriyorsanız, bu çözümü kullanın. Şimdi veri kaynağınız için gerçek bir sunucu adı sağlıyorsanız, bu çözüm gitmenin yoludur. –

0

ve benim başlangıç ​​uygulamasının app.config bağlantı dizesini oluşturulan EDMX kopyalayarak bu çözüldü: