2015-04-04 14 views
24

nasıl EF7 EF Çekirdek iki tablo arasında birçok ilişki bir sayıda oluşturmak için Akıcı bir API kullanılır?EF Core'un en son gece yapımıyla birçok ilişki nasıl oluşturulur?

Photos to People database diagram

İnsan nasıl böyle bir ilişkiyi tanımlamak için DBContext sınıfında ModelBuilder kaldıraç olacaktır: Örneğin, aşağıdaki tablolar demek?

Bu konu ile ilgili olarak EF takımın toplantı notlarından this linki gördüm ama geçen yıl ve EF7 EF Çekirdek bu yaklaşım konusunda yeni bilgi olup olmadığını merak ediyorum.

Ben Fotoğraf ve PhotosPeople yanı sıra Kişiler ve PhotosPeople arasında birçok ilişkiler tane oluşturmak mümkün. Veri tabanı, olmasını istediğim gibi oluşturuldu, ancak Kişiler ve Fotoğraflar arasındaki gezinme artık bir ara varlıkla etkileşim gerektiriyor. Bundan kaçınmak isterim.

cevap

43

Bu #1368 tarafından izlenir.

class Photo 
{ 
    public int Id { get; set; } 
    public ICollection<PersonPhoto> PersonPhotos{ get; set; } 
} 

class PersonPhoto 
{ 
    public int PhotoId { get; set; } 
    public Photo Photo { get; set; } 

    public int PersonId { get; set; } 
    public Person Person { get; set; } 
} 

class Person 
{ 
    public int Id { get; set; } 
    public ICollection<PersonPhoto> PersonPhotos{ get; set; } 
} 

kompozit anahtar ile PersonPhoto yapılandırmak için emin olun:,

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<PersonPhoto>().HasKey(x => new { x.PhotoId, x.PersonId }); 
} 

gezinmek için kullandığınız bir seç: geçici çözüm bir varlığa masaya katılmak haritalarını çıkarmak

// person.Photos 
var photos = person.PersonPhotos.Select(c => c.Photo); 
Microsoft.Data.Entity.Metadata.ModelItemNotFoundException: Ben diyor göç çalıştırmayı denediğinizde
+0

varlık türünü 'PersonPhoto' tanımlanacak bir anahtar gerektirir. – Olle

+3

Bu nedenle koddaki notum. 'ModelBuilder.Entity () .KEY (x => yeni {x.PhotoId, x.PersonId}) kullanarak yapılandırma;' – bricelam

+1

Ohh. Harika. Teşekkürler bricelam. Dikkat etmediğim için özür dilerim. Teşekkürler. senin xmaple sonrasında bu yaklaşımı çalışırken – Olle

İlgili konular