C# Code First İle Database Tabloları Oluşturma

WhoWalksAlone

Kilopat
Katılım
13 Ocak 2014
Mesajlar
146
Çözümler
2
Yer
İstanbul
Daha fazla  
Cinsiyet
Erkek
Daha önce çok fazla C# deneyimi olmamış ve internetten yaptığım uzun araştırmalar sonucunda sorunuma çözüm bulamadığım için size sormak istiyorum bunu.
Elimde tablo değişkenleri oluşturulmuş bir C# projesi mevcut. Yani Abonelikler.cs ve Arac.cs gibi dosyalar mevcut projemin içinde. İçlerinde değişkenler türlerine göre tanımlanmış durumdalar. Programı derlediğimde programın localdb'de tabloları oluşturması gerekiyormuş. İçlerine değer yazılmayacak. Yalnızca tablolar .cs dosyalarındaki özelliklere göre oluşturulacak. Ancak bir türlü bu işlemi yapamadım. Bana localde SQL Manager yardımıyla oluşturmak istediğim database ile aynı isimde bir database oluşturmam ancak tablo eklememem söylendi. Program build edildiğinde ise tabloların kendiliğinden localdb'de oluşacağı söylendi ancak bunu yapmayı başaramıyorum. Server Explorer penceresi üzerinden localde oluşturmuş olduğum OtoparkDB isimli database'i ekledim. Artık Server Explorer penceresinde oluşturduğum database görünüyor. Ancak projeyi build ettiğimde bir türlü tablolar oluşmuyor. Ek bilgi olarak bu proje başka bir bilgisayarda mevcuttu. Ben oradan alıp solution üzerinde bu projeyi ekledim. Yani App.config dosyası içerisindeki connectionStringler üzerinde de değişiklik yapmam gerekebilir gibi geliyordu. Bende biraz inceleyip user ID olarak root görünen kısmı kendi kullanıcı adım olan Erkam/WWA olarak değiştirdim ancak yine çözüme ulaşamadım.
Yaptığım projeyle ilgili olarak daha detaylı bilgi vermem gerekirse şöyle diyeyim.
Şuanda bu solution üzerinde iki farklı proje ekli. Birisi Veritabanı, diğeri ise bir MVC projesi. Veritabanı projesini derleyip tabloları oluşturduktan sonra MVC projesinde Veritabanı projesini referans olarak gösterdiğim için MVC projesi üzerinden Veritabanı projesinde oluşturulmuş olan tabloları kullanarak gerekli kayıt işlemlerini gerçekleştireceğim.
Umarım sorunumu ve projemi yeterince açıklayabilmişimdir. Eğer anlamadığınız bir nokta varsa sorun lütfen. 2 gündür uğraşıyorum ancak bir türlü çözüme ulaşamadım..
Şimdiden yardımcı olan olmayan herkese teşekkürler.

Konuyu kendim çözdüm.
Oluşturulmuş olan veritabanı projesi zaten çalıştırılabilir türden bir proje değildi. Yalnızca tablolar için gerekli olan sınıflar yazılmış ve ilgili context dosyası oluşturulmuş durumdaydı.
Defalarca aynı şeyi yazmama ve App.config dosyasındaki connection string ayarlarını doğru bir şekilde defalarca yapmama rağmen bir türlü tabloların local veritabanımda oluşmasını sağlayamıyordum.
Sorunumu dile getirirken yazmış olduğum localde ilgili veritabanını oluşturdum ancak veritabanını oluşturmuş olmama rağmen yinede tablolar oluşmuyor şeklindeki kısımda tamamen yok sayılması gereken bir kısım.
Sorunumun tam olarak neden kaynaklandığını bilmiyorum açıkçası ancak adım adım tekrar projemi oluştururken yaptıklarımı sıralamak istiyorum.
Bana verilmiş olan proje MySQL DB'ye bağlanmak üzere tasarlanmış durumdaydı ve ben her seferinde MySQL'e bağlanabilmek amacıyla yazılmış olan ekstra satırları silerek ya da yorum satırı yaparak projeyi derliyordum. Bunu bıraktım ve projenin içindeki şeyleri tekrar yeni bir proje oluşturarak kendim yazdım.
Daha sonra App.config kısmındaki ayarları kesin bir şekilde doğru yapabilmek amacıyla daha önce oluşturmuş olduğum bir projenin ilgili connection string kısmını yeni oluşturduğum veritabanı projemin içine kopyalayıp yapıştırdım. Ardından ilgili kısımları değiştirdim. Size örnek teşkil etmesi amacıyla buraya connection string kısmını koyuyorum.

Kod:
<connectionStrings>
    <add
         name="DATABASE ADI"
     connectionString="Data Source=SQL SERVER KULANICI ADINIZ;Initial Catalog=DATABASE ADI;Integrated Security=True"
     providerName="System.Data.SqlClient"/>
  </connectionStrings>

Daha sonra context dosyasını oluşturmaya başladım. Context sınıfınızın DbContext'ten türetilmesi konusuna (kalıtım alınmasına) ve OnModelCreating metodunu override yapmaya dikkat ediniz ve unutmayınız.

Tüm bunları doğru bir şekilde yaptıktan sonra projenizi yalnızca derleyiniz. Çalıştırmaya çalışırsanız hata alırsınız. Derlediğinizde söylediğim şeylere uygun bir şekilde hareket ettiyseniz local veritabanınızda ilgili veritabanı ve tablolar oluşacaktır.

Daha önce çok fazla C# deneyimi olmamış ve internetten yaptığım uzun araştırmalar sonucunda sorunuma çözüm bulamadığım için size sormak istiyorum bunu.
Elimde tablo değişkenleri oluşturulmuş bir C# projesi mevcut. Yani Abonelikler.cs ve Arac.cs gibi dosyalar mevcut projemin içinde. İçlerinde değişkenler türlerine göre tanımlanmış durumdalar. Programı derlediğimde programın localdb'de tabloları oluşturması gerekiyormuş. İçlerine değer yazılmayacak. Yalnızca tablolar .cs dosyalarındaki özelliklere göre oluşturulacak. Ancak bir türlü bu işlemi yapamadım. Bana localde SQL Manager yardımıyla oluşturmak istediğim database ile aynı isimde bir database oluşturmam ancak tablo eklememem söylendi. Program build edildiğinde ise tabloların kendiliğinden localdb'de oluşacağı söylendi ancak bunu yapmayı başaramıyorum. Server Explorer penceresi üzerinden localde oluşturmuş olduğum OtoparkDB isimli database'i ekledim. Artık Server Explorer penceresinde oluşturduğum database görünüyor. Ancak projeyi build ettiğimde bir türlü tablolar oluşmuyor. Ek bilgi olarak bu proje başka bir bilgisayarda mevcuttu. Ben oradan alıp solution üzerinde bu projeyi ekledim. Yani App.config dosyası içerisindeki connectionStringler üzerinde de değişiklik yapmam gerekebilir gibi geliyordu. Bende biraz inceleyip user ID olarak root görünen kısmı kendi kullanıcı adım olan Erkam/WWA olarak değiştirdim ancak yine çözüme ulaşamadım.
Yaptığım projeyle ilgili olarak daha detaylı bilgi vermem gerekirse şöyle diyeyim.
Şuanda bu solution üzerinde iki farklı proje ekli. Birisi Veritabanı, diğeri ise bir MVC projesi. Veritabanı projesini derleyip tabloları oluşturduktan sonra MVC projesinde Veritabanı projesini referans olarak gösterdiğim için MVC projesi üzerinden Veritabanı projesinde oluşturulmuş olan tabloları kullanarak gerekli kayıt işlemlerini gerçekleştireceğim.
Umarım sorunumu ve projemi yeterince açıklayabilmişimdir. Eğer anlamadığınız bir nokta varsa sorun lütfen. 2 gündür uğraşıyorum ancak bir türlü çözüme ulaşamadım..
Şimdiden yardımcı olan olmayan herkese teşekkürler.

Konuyu kendim çözdüm.
Oluşturulmuş olan veritabanı projesi zaten çalıştırılabilir türden bir proje değildi. Yalnızca tablolar için gerekli olan sınıflar yazılmış ve ilgili context dosyası oluşturulmuş durumdaydı.
Defalarca aynı şeyi yazmama ve App.config dosyasındaki connection string ayarlarını doğru bir şekilde defalarca yapmama rağmen bir türlü tabloların local veritabanımda oluşmasını sağlayamıyordum.
Sorunumu dile getirirken yazmış olduğum localde ilgili veritabanını oluşturdum ancak veritabanını oluşturmuş olmama rağmen yinede tablolar oluşmuyor şeklindeki kısımda tamamen yok sayılması gereken bir kısım.
Sorunumun tam olarak neden kaynaklandığını bilmiyorum açıkçası ancak adım adım tekrar projemi oluştururken yaptıklarımı sıralamak istiyorum.
Bana verilmiş olan proje MySQL DB'ye bağlanmak üzere tasarlanmış durumdaydı ve ben her seferinde MySQL'e bağlanabilmek amacıyla yazılmış olan ekstra satırları silerek ya da yorum satırı yaparak projeyi derliyordum. Bunu bıraktım ve projenin içindeki şeyleri tekrar yeni bir proje oluşturarak kendim yazdım.
Daha sonra App.config kısmındaki ayarları kesin bir şekilde doğru yapabilmek amacıyla daha önce oluşturmuş olduğum bir projenin ilgili connection string kısmını yeni oluşturduğum veritabanı projemin içine kopyalayıp yapıştırdım. Ardından ilgili kısımları değiştirdim. Size örnek teşkil etmesi amacıyla buraya connection string kısmını koyuyorum.

Kod:
<connectionStrings>
    <add
         name="DATABASE ADI"
     connectionString="Data Source=SQL SERVER KULANICI ADINIZ;Initial Catalog=DATABASE ADI;Integrated Security=True"
     providerName="System.Data.SqlClient"/>
  </connectionStrings>

Daha sonra context dosyasını oluşturmaya başladım. Context sınıfınızın DbContext'ten türetilmesi konusuna (kalıtım alınmasına) ve OnModelCreating metodunu override yapmaya dikkat ediniz ve unutmayınız.

Tüm bunları doğru bir şekilde yaptıktan sonra projenizi yalnızca derleyiniz. Çalıştırmaya çalışırsanız hata alırsınız. Derlediğinizde söylediğim şeylere uygun bir şekilde hareket ettiyseniz local veritabanınızda ilgili veritabanı ve tablolar oluşacaktır.

Unuttuğum bir kısım var. Context dosyasınızı oluşturduktan sonra Package Manager Console'a gelerek enable-migrations komutunu yazınız. İşlem tamamlandıktan sonra yine aynı yerde update-database -force komutunu çalıştırınız. Bu işlemde tamamlandıktan sonra projenizi derleyebilirsiniz.
Veritabanı sınıflarında herhangi bir değişiklik yaparsanız daha sonra her seferinde update-database -force komutunu Package Manager Console üzerinde yazmayı unutmayınız. Ancak bu şekilde değişikliklerin veritabanınıza yansımasını sağlayabilirsiniz.

Son olarak unuttuğum son detayı da sizinle paylaşmak istiyorum.
enable-migrations komutunu çalıştırdıktan sonra eklenmiş olan Migrations Klasörü'nün içinde bulunan Configruation.cs dosyasına gelerek
Kod:
AutomaticMigrationsEnabled = false;
kısmındaki false'u true ile değiştirmeniz gerekli.
 
Uyarı! Bu konu 7 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Geri
Yukarı