Context sınıfınızın default yapıcısı olmalı ve doğru dbnin adını vermelisiniz.
PM konsolunuzda ilgili projenizin(context'i barındıran) kök klasörüne gelmelisiniz ve "Enable-Migrations –EnableAutomaticMigrations" kodunu çalıştırmalısınız. Bu kodu bulamadım diyerek çalışmazsa entity framework'ünüzü güncellemeyi deneyin. Enable-Migrations –EnableAutomaticMigrations çalıştıktan sonra Migrations diye bir klasör ve içinde Configuration.cs sınıfının oluştuğunu göreceksiniz.
Ardından "Update-Database -Verbose" kodunu kullanrak kodunuzdaki güncellemeyi veritabanınıza yansıtabilirsiniz. -Verbose parametresi ile çalıştırılan SQL ifadelerini gözlemleyebilirsiniz.
Son olarak hem PM de hangi klasörede olduğumuzu hemde update sonucundaki sql ifadelerini görebileceğiniz ekran:
Aklımda Kalası Kelimeler
* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur
Code First etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Code First etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
4 Nisan 2013 Perşembe
8 Şubat 2013 Cuma
Fluent API Nedir, Ne Değildir?
Referans: Configuring Relationships with the Fluent API
Yukarıdaki bağlantıdan edindiklerimi aktaracağım ve birazda okuduğum, izlediklerimden serpiştireceğim. Maksat kavrama seviyesini idrak düzeyine eriştirmek.
Julia Lerman'ın kitapları var Code First ve DbContext üzerine. Gördümki FLUENT API yi kullanmak Annotations'dan hem daha okunaklı hem de tüm yetenekleri barındırması açısından tercih sebebi.
Tablolar arasında ilişkileri Foreign Key ve Navigation özelliklerini kullanarak yapıyoruz. Bu ilişkileri vermek için Fluent API içinde HasRequired, HasOptinal ve HasMany metotlarını kullanıyoruz. Bu metotlar lambda ifadelerini parametre olarak alırlar.
HasKey metodu; tablonun Primary Key alanını ifade etmek için kullanılır ve POCO sınıfında bu değer otomatik oluşturuluyorsa girilmez.
HasRequired metodu; tablo alanlarının boş bırakılamayacağını işaretlemekte kullanılır.
HasMany metodu; bir kolleksiyona yönlenen lambda ifadesi içerir.
HasForeignKey metodu; tabloya başka bir tablonun PK alanını vermek için kullanılır.
http://stackoverflow.com/a/7644906/104085
Tersi yönündeki yönelmeyi de WithRequired, WithOptinal, WithMany metotları sağlar.
VT'yi oluşturmak için kullanacağımız Provider ve VT erişimi için kullanıcı bilgilerini .Config dosyasında tutalım ve DbContext'in yaratıcı metoduna parametre olarak verelim:
DbContext'i miras alan ve tüm DbSet'leri tutarak VT'nin yaratılması öncesi eylemleri yapacağımız sınıfta VT'yi her defasında silip tekrar yaratalım:
Eğer Adres bilgisi(Kisi->IkametAdresi) girilmeden Kisi nesnesini VT ye giremezsiniz. İşte aşağıdaki hata sonucu:
Böyle bir ilişkide eğer önce Foreign Key nesnesini girilmeli:
Aşağıdaki POCO yapısına göre daha aşağıda oluşan VT'yi göreceksiniz:
Saat 00:35. Yarın ola hayrola ...
Yukarıdaki bağlantıdan edindiklerimi aktaracağım ve birazda okuduğum, izlediklerimden serpiştireceğim. Maksat kavrama seviyesini idrak düzeyine eriştirmek.
Julia Lerman'ın kitapları var Code First ve DbContext üzerine. Gördümki FLUENT API yi kullanmak Annotations'dan hem daha okunaklı hem de tüm yetenekleri barındırması açısından tercih sebebi.
Tablolar arasında ilişkileri Foreign Key ve Navigation özelliklerini kullanarak yapıyoruz. Bu ilişkileri vermek için Fluent API içinde HasRequired, HasOptinal ve HasMany metotlarını kullanıyoruz. Bu metotlar lambda ifadelerini parametre olarak alırlar.
HasKey metodu; tablonun Primary Key alanını ifade etmek için kullanılır ve POCO sınıfında bu değer otomatik oluşturuluyorsa girilmez.
HasRequired metodu; tablo alanlarının boş bırakılamayacağını işaretlemekte kullanılır.
HasMany metodu; bir kolleksiyona yönlenen lambda ifadesi içerir.
HasForeignKey metodu; tabloya başka bir tablonun PK alanını vermek için kullanılır.
http://stackoverflow.com/a/7644906/104085
Tersi yönündeki yönelmeyi de WithRequired, WithOptinal, WithMany metotları sağlar.
VT'yi oluşturmak için kullanacağımız Provider ve VT erişimi için kullanıcı bilgilerini .Config dosyasında tutalım ve DbContext'in yaratıcı metoduna parametre olarak verelim:
<connectionStrings> <add name="cnn" connectionString="data source=.; Initial Catalog=cop; Integrated Security=SSPI;" providerName="System.Data.SqlClient" /> </connectionStrings>
DbContext'i miras alan ve tüm DbSet'leri tutarak VT'nin yaratılması öncesi eylemleri yapacağımız sınıfta VT'yi her defasında silip tekrar yaratalım:
public class Kontext : DbContext { public Kontext() : base("name=cnn") { this.Database.Delete(); //VT yi silelim this.Database.CreateIfNotExists(); //Silinmiş VTyi yaratalım } }
HasRequired
Veritabanını oluşturmak için aşağıdaki kodlama yapılır ve One To One tablo yapısı oluşturulur. Burada principal Adres olacak ve Kisi sınıfında FK olarak yer alacak.Eğer Adres bilgisi(Kisi->IkametAdresi) girilmeden Kisi nesnesini VT ye giremezsiniz. İşte aşağıdaki hata sonucu:
Böyle bir ilişkide eğer önce Foreign Key nesnesini girilmeli:
Aşağıdaki POCO yapısına göre daha aşağıda oluşan VT'yi göreceksiniz:
public class Kontext : DbContext { public Kontext() : base("name=cnn") { this.Database.Delete(); this.Database.CreateIfNotExists(); } #region DbSets public DbSetKisiler { get; set; } public DbSet Adresler { get; set; } public DbSet Meslekler { get; set; } #endregion protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity ().HasKey(p => p.Id) .HasRequired(p => p.FaturaAdresleri) .WithMany(); } } public class Kisi { public int Id { get; set; } public string Adi { get; set; } public virtual ICollection Mesleks { get; set; } public virtual ICollection FaturaAdresleri { get; set; } public virtual ICollection TeslimatAdresleri { get; set; } } public class Meslek { public int Id { get; set; } public string Adi { get; set; } public virtual ICollection Kisis { get; set; } } public class Adres { public int Id { get; set; } public string AcikAdres { get; set; } }
Saat 00:35. Yarın ola hayrola ...
One to Zero or One
One to Zero or Many
Etiketler:
Code First,
DbContext,
HasKey,
HasRequired,
OnModelCreating,
WithMany
Kaydol:
Kayıtlar (Atom)