2016-03-21 1 views
1

J'ai une table Paquets contenant des informations sur un paquet (support, poids ..).Entity Framework - plusieurs à plusieurs

Je veux associer les produits pour ce package donc j'ai fait les suivantes:

public class Package 
{ 
    public int ID { get; set; } 
    public Order Order { get; set; } 
    public int Weight { get; set; } 
    public List<Product> Products { get; set; } 
} 

Qu'est-il arrivé est qu'il a ajouté package_id à la table des produits, mais cela est une relation plusieurs à plusieurs. Comment puis-je maintenir, si possible, la liste des produits dans la table des paquets, mais lui faire savoir que c'est beaucoup à beaucoup?

Merci.

+0

Vous avez besoin d'une table de jointure qui font référence à l'ID de package et l'ID de produit pour créer un grand nombre de beaucoup. L'orm peut supporter ceci de manière transparente ou avec une entité séparée. –

+0

Vous n'avez pas montré comment vous remplissiez la liste Package.Products? Tout dépend de votre expression lambda, qui devrait seulement retourner la liste des produits dans ce paquet. Comment la relation de plusieurs à plusieurs est-elle imposée? avez-vous une table rel? – DaniDev

Répondre

0

Si vous voulez Emballez avoir plusieurs à plusieurs avec le produit, ajoutez au lieu de la liste

public virtual ICollection<Products> Products {get;set;} 

Et dans le tableau de produit ajouter cette ligne

public virtual ICollection<Package> Packages {get;set;} 

EF va créer une nouvelle table nommé ProductsPackages. Chaque rangée représente une relation entre elles.

0

De nombreuses relations dans le cadre d'entité sont créées avec des tables de jonction. Vous pouvez les créer en mappant la relation, ou vous pouvez créer la table de jonction vous-même.

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 

modelBuilder.Entity<Package>() 
      .HasMany<Product>(s => s.Products) 
      .WithMany(c => c.Packages) 
      .Map(cs => 
        { 
         cs.MapLeftKey("PackageRefId"); 
         cs.MapRightKey("ProductRefId"); 
         cs.ToTable("PackageProduct"); 
        }); 

} 

vous create table:

public class PackageProduct 
{ 
    public virtual Package Package { get; set; } 
    public virtual Product Product { get; set; } 
} 

Jimmy Bogard discute de la méthode à utiliser: https://lostechies.com/jimmybogard/2014/03/12/avoid-many-to-many-mappings-in-orms/