2013-05-23 13 views
8

Uçlarından birinde gezinme özelliği olmadan çok fazla ilişkiyi haritalandırmak mümkün mü? Örneğin bazı widget'ları ve belirli widget'ları takabilen bazı kullanıcılar var. Bir kullanıcı yıldızlı önemsiyor ki widget'lardan görmek mümkün istiyorum, ama gerçekten özel bir widget'ıHarita Çok sayfalı gezinme özelliği olmadan birçok ilişki

Widget.cs

public int Id { get; set; } 
public string Name { get; set; } 

Kullanıcı yıldız vermiş tüm kullanıcıları görme umurumda değil. cs

public int Id { get; set; } 
public string Username { get; set; } 
public ICollection<Widget> StarredWidgets { get; set; } 

Bu kurulum ile EF, Widget'lar'dan Kullanıcılara bire çok ilişki oluşturur. Bununla birlikte, birçok için çok olması gerekiyor. Bir public ICollection<User> Users'u Widget.cs'a ekleyebileceğimin farkındayım, ama bunun için başka bir yolun olup olmadığını görüyorum.

cevap

27
yapabilirsiniz

ve bu durumda Akıcı API ile çok-çok ilişki tanımlamak gerekir: Ben `myUserPrefObj.StarredWidgets.Add (çağırdığınızda

modelBuilder.Entity<User>() 
    .HasMany(u => u.StarredWidgets) 
    .WithMany() // <- no parameter here because there is no navigation property 
    .Map(m => 
    { 
     m.MapLeftKey("UserId"); 
     m.MapRightKey("WidgetId"); 
     m.ToTable("UserWidgets"); 
    }); 
+0

Bu veritabanı tabloları doğru kurulum görünüyor ve myWidget) 'Giriş, birleştirme tablosuna doğru şekilde eklenir. Ancak, daha sonra farklı bir db bağlamı kullanarak myUserPrefObj'yi yeniden yüklemeye çalıştığımda, 'StarredWidgets' özelliği sıfırdır. Herhangi bir fikir? – Kyle

+0

Nevermind. Navigasyon özelliğini 'sanal' olarak işaretlemeyi unuttuğumu farkettim. – Kyle

+1

@Kyle: Bu "normal" :) Eğer bir varlık yüklemek istiyorsanız ve * içerir * navigasyon özelliği birini kullanmanız gerekir, iyi ... * Dahil *: 'context.Users.Include (u => u. StarredWidgets) .Where ... '. Ya da "StarredWidgets" öğesini "virtual" olarak işaretleyin, sonra tembel yükleme koleksiyonu yükleyecektir, ancak ikinci bir DB sorgusu gerektirir. 'Dahil Et' ile sadece bir sorguya ihtiyacınız var. – Slauma

İlgili konular