"Bir makale daima bir Blog'a ait olmalıdır" tanımını gerçeklemek için Blog ve Post sınıfları arasında şöyle bir ilişki tanımlanmalıdır:
public class Blog { public int Id { get; set; } public string Title { get; set; } public string BloggerName { get; set; } public virtual ICollection<Post> Posts { get; set; } } public class Post { public int Id { get; set; } public string Title { get; set; } public DateTime DateCreated { get; set; } public string Content { get; set; } public int BlogId { get; set; } public Blog Blog { get; set; } }Buna göre şu DB oluşur. Dikkat etmeniz gereken yer BlogId alanının Not Null olarak Post tablosunda oluşmasıdır. Bunu yapanın
public int BlogId { get; set; }
özelliği olduğuna dikkat ediniz.Eğer Post içindeki BlogId özelliğini "EF zaten
public Blog Blog { get; set; }
özelliğini görür görmez oluşturacak" dersenizO zamanda Null bırakılabilir bir makale girişi yapabiliyor olacaksınız. One - To - [Zero Or One](1-0..1) ilişkisini solda Blog olacak şekilde kurdunuz demektir.
Peki
public int BlogId { get; set; }
özelliğini sınıf içinde tanımlamadan Fluent API ile OnModelCreating metodunda tanımlamak isterseniz:protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); }Post sınıfındaki Blog özelliğinin gerekli olduğunu belirmek için:
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Post>().HasRequired(p => p.Blog); }
Son şekliyle kodumuz:
using System; using System.Collections.Generic; using System.Data.Entity; namespace caFluentAPI { class Program { static void Main(string[] args) { var ctx = new Ctx_Blog(); var v = new Blog() { BloggerName = "CemT", Title = "Notlarımdan", }; ctx.Blogs.Add(v); ctx.SaveChanges(); } } public class Ctx_Blog : DbContext { public Ctx_Blog() : base("name=cnn") { Database.SetInitializer<Ctx_Blog>(new DropCreateDatabaseAlways<Ctx_Blog>()); } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Post>().HasRequired(p => p.Blog); } public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } } public class Blog { public int Id { get; set; } public string Title { get; set; } public string BloggerName { get; set; } public virtual ICollection<Post> Posts { get; set; } } public class Post { public int Id { get; set; } public string Title { get; set; } public DateTime DateCreated { get; set; } public string Content { get; set; } //public int BlogId { get; set; } public Blog Blog { get; set; } } }