"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; }
}
}



1 yorum:
merhabalar
tbOgrenci(id (pk),okulNo,adi)
ve
tbDersleri(id(pk),okulNo(fk),ders,not)
gibi sınıflarımız olsun burada id ler primaryKey olmak şartıyla okulNo ile tablolar arası ilişkilendirme fluentApi ile nasıl yapılabilir. açıklayabilirmisiniz?
teşekkürler
Yorum Gönder