8

Entity Framework 7 Kodunda Bire Bir veya ZeroOrOne-to ilişkileri nasıl yapılandırılır Önce Veri Açıklamaları veya Akıcı Api?Entity Framework 7'de Bire bir ilişkiler İlk Kod

+1

Bunu okuyun [makale] (http://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-first.aspx) –

cevap

20

Sen

class MyContext : DbContext 
{ 
    public DbSet<Blog> Blogs { get; set; } 
    public DbSet<BlogImage> BlogImages { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Blog>() 
      .HasOne(p => p.BlogImage) 
      .WithOne(i => i.Blog) 
      .HasForeignKey<BlogImage>(b => b.BlogForeignKey); 
    } 
} 

public class Blog 
{ 
    public int BlogId { get; set; } 
    public string Url { get; set; } 

    public BlogImage BlogImage { get; set; } 
} 

public class BlogImage 
{ 
    public int BlogImageId { get; set; } 
    public byte[] Image { get; set; } 
    public string Caption { get; set; } 

    public int BlogForeignKey { get; set; } 
    public Blog Blog { get; set; } 
} 
+0

Ve açık olmayan bir şey BlogImage'ın birebir veya birebir bir ilişkiye sahip olmak yerine Blog'la birebir bir ilişkiye sahip olmanız (ya da isteğe bağlı olarak kendi başına bir BlogImage) istiyorsanız bir blog atıfta bulunmaz, sadece BlogImage.BlogForeignKey null yapmak zorundasınız, bu gibi: public int? BlogForeignKey {get; set;} –

+2

Bu özellik gerçekten gerekli mi? 'public int BlogForeignKey {get; set;}' –

2

yukarıdaki cevabı kesinlikle doğru aşağıdaki gibi Entity Framework 7'de Akıcı API kullanarak OneToOne ilişkiyi tanımlayabilirsiniz.

Sadece okuyucular bilgi için: Bu her iki tarafta bir referans navigasyon özelliği vardır official documentation

Bire bir

Bire bir ilişkilerde güzel izah edilmiştir. Aynı sözleşmeleri bire-çok ilişkiler olarak izlerler, ancak her bir prensip ile ilgili sadece bir bağımlı olduğundan emin olmak için yabancı anahtar özelliği üzerinde benzersiz bir endeks tanıtılır. varlıklar birini seçecek

public class Blog 
{ 
    public int BlogId { get; set; } 
    public string Url { get; set; } 

    public BlogImage BlogImage { get; set; } 
} 

public class BlogImage 
{ 
    public int BlogImageId { get; set; } 
    public byte[] Image { get; set; } 
    public string Caption { get; set; } 

    public int BlogId { get; set; } 
    public Blog Blog { get; set; } 
} 

Not

EF yabancı anahtar özelliği tespit edebilme kabiliyeti dayalı bağımlı olmak. Yanlış varlık bağımlı olarak seçilirse, bunu düzeltmek için Fluent API'yi kullanabilirsiniz.

+2

Do Bu özelliği gerçekten tanımlamam gerekiyor? 'Public int BlogId {get; set;}' –

+1

@MohammedNoureldin Mülkiyet public int BlogId {get; set;} 'gereklidir çünkü' 'EF varlıklardan birini seçecektir Yabancı bir anahtar özelliği tespit etme yeteneğine bağlı olarak bağımlı olmak. "' Bire bir bölümdeki https://docs.microsoft.com/en-us/ef/core/modeling/relationships'deki nota bakın. İlişkisel Desenlerin İncelenmesi. –

İlgili konular