2011-11-15 16 views
19

EF için yeni ve kod ilk yaklaşımla çoktan çoğa tek yönlü ilişki kurmaya çalışıyorum. Örneğin, iki sınıfı (gerçek modelimi değil), aralarında N * N ilişkisi varsa, ancak "Müşteri" tarafındaki gezinme özelliği yoksa. haritalama kodu benziyorKod İlk Varlık Çerçevesi ile tek yönlü çoktan fazla gerçekçilik

public class User { 
    public int UserId { get; set; } 
    public string Email { get; set; } 
    public ICollection TaggedCustomers { get; set; } 
} 
public class Customer { 
    public int CustomerId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
}

...

modelBuilder.Entity() 
     .HasMany(r => r.TaggedCustomers) 
     .WithMany(c => c.ANavgiationPropertyWhichIDontWant) 
     .Map(m => 
     { 
      m.MapLeftKey("UserId"); 
       m.MapRightKey("CustomerId"); 
       m.ToTable("BridgeTableForCustomerAndUser"); 
     });

Bu sözdizimi "Müşteri" varlık için "WithMany" olması beni zorla. Aşağıdaki url, "İlk olarak, Kural İlkinde, her zaman tek yönlü bir ilişkiyi tek yönlü olarak yorumlar."

Geçersiz kılmak mümkün mü yoksa başka bir yaklaşım mı kullanmalıyım?

cevap

35

bunu kullanın:

modelBuilder.Entity<User>() 
    .HasMany(r => r.TaggedCustomers) 
    .WithMany() // No navigation property here 
    .Map(m => 
     { 
      m.MapLeftKey("UserId"); 
      m.MapRightKey("CustomerId"); 
      m.ToTable("BridgeTableForCustomerAndUser"); 
     }); 
+1

teşekkür çok, ne basit bir çözüm:

public class User { public int UserId { get; set; } public string Email { get; set; } // You must use generic collection public virtual ICollection<Customer> TaggedCustomers { get; set; } } public class Customer { public int CustomerId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } 

Ve ile eşlersiniz. Yüzümü kurtarmak için, onu kendi bilgisizliğime değil, belgeleme eksikliğine karşı suçluyorum. –

+0

Bunu niteliklerle yapmak mümkün mü? – TDaver

+0

@TDaver: Hayır, öznitelikleri yalnızca iki ucunda gezinme özellikleri varsa ve bağlantı tablosundaki ad ve sütunları kontrol etmeyi beklemediyseniz işe yarayabilir. –

İlgili konular