J’ai une table appelée Produits qui contient évidemment des produits. Cependant, je dois créer des produits connexes. Donc, ce que j’ai fait, c’est créer une table de jonction appelée product_related qui a deux PK. ProductID de la table Products et RelatedID également de la table Products.
J’utilise déjà EF et j’ai tout mis en place sur d’autres tables. Comment dois-je append ceci correctement afin de créer une relation avec les produits en tant que tels: product.Products.Add(product object here)
. Bien sûr, ici, le product
représente un object produit que j’ai récupéré depuis la firebase database en utilisant db.Products.FirstOr...
Comment dois-je le faire correctement? Beaucoup à plusieurs à la même table?
Merci.
Pour créer une relation plusieurs-à-plusieurs avec l’ approche Database-First, vous devez configurer un schéma de firebase database qui respecte certaines règles:
Products
avec une colonne ProductID
comme clé primaire ProductRelations
avec une colonne ProductID
et une colonne RelatedID
et marquez les deux colonnes comme clé primaire (clé composite) ProductRelations
aucune autre colonne à la table ProductRelations
. Les deux colonnes clés doivent être les seules colonnes de la table pour permettre à EF de reconnaître cette table en tant que table de liens pour une relation plusieurs-à-plusieurs Products
tant que clé primaire-table avec le ProductID
tant que clé primaire et la table ProductRelations
tant que clé-table étrangère avec uniquement le ProductID
tant que clé étrangère Products
tant que table de clés primaire avec le ProductID
tant que clé primaire et la table ProductRelations
tant que table de clés étrangères avec uniquement l’ RelatedID
tant que clé étrangère. Si vous générez un modèle de données d’entité à partir de ces deux tables, vous n’obtiendrez plus qu’une entité , à savoir une entité Product
(ou peut-être Products
si vous désactivez la singularisation). La table de liens ProductRelations
ne sera pas exposée en tant qu’entité.
L’entité Product
aura deux propriétés de navigation :
public EntityCollection Products { get { ... } set { ... } } public EntityCollection Products1 { get { ... } set { ... } }
Ces collections de navigation sont les deux extrémités de la même relation plusieurs-à-plusieurs. (Si vous souhaitiez lier deux tables différentes par une relation plusieurs-à-plusieurs, par exemple, les tables A
et B
, une collection de navigation ( Bs
) se trouverait dans l’entité A
et l’autre ( As
) serait dans l’entité B
. votre relation étant “auto-référencée”, les deux propriétés de navigation se trouvent dans l’entité Product
.)
La signification des deux propriétés est la suivante: les Products
sont les produits liés au produit donné, les Products1
sont les produits qui se rapportent au produit donné. Par exemple: Si la relation signifie qu’un produit a besoin d’autres produits en tant que pièces à fabriquer et que vous avez les produits “Notebook”, “Processor”, “Silicon chips”, le “Processor” est constitué de “Silicon chips” (“Silicon chips “est un élément de la collection Products
de l’entité produit Processor
) et est utilisé par un” Notebook “(” Notebook “est un élément de la collection Products1
de l’entité produit Processor
). Au lieu de Products
et Products1
les noms MadeOf
et UsedBy
seraient alors plus appropriés.
Vous pouvez supprimer en toute sécurité l’une des collections du modèle généré si un seul aspect de la relation vous intéresse. Supprimez simplement par exemple Products1
dans la surface du concepteur de modèles. Vous pouvez également renommer les propriétés. La relation sera encore plusieurs à plusieurs.
modifier
Comme demandé dans un commentaire, le modèle et la correspondance avec une approche Code-First seraient les suivants:
Modèle:
public class Product { public int ProductID { get; set; } public ICollection RelatedProducts { get; set; } }
Cartographie:
public class MyContext : DbContext { public DbSet Products { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity () .HasMany(p => RelatedProducts) .WithMany() .Map(m => { m.MapLeftKey("ProductID"); m.MapRightKey("RelatedID"); m.ToTable("product_related"); }); } }
Prenons votre exemple:
Tableau connexe
Related_id PK Related_name Date
Tableau des produits
Product_id PK Related_id FK Product_Name Date
Comment le représenter dans EF
Classe de modèle associée nommée RelatedModel
[Key] public int Related_id { get; set; } public ssortingng Related_name {get;set} public Datetime Date{get;set;}
Classe de modèle de produit nommée ProductModel
[Key] public int Product_id { get; set; } public ssortingng Product_name {get;set} public ssortingng Related_id {get;set} public Datetime Date{get;set;} [ForeignKey("Related_id ")] //We can also specify here Foreign key public virtual RelatedModel Related { get; set; }
De cette façon, nous pouvons créer des relations entre deux table
Maintenant, dans le cas de plusieurs à plusieurs relations, je voudrais prendre un autre exemple ici
Supposons que je possède une inscription de classe Model.cs
public class Enrollment { public int EnrollmentID { get; set; } public int CourseID { get; set; } public int StudentID { get; set; } public decimal? Grade { get; set; } public virtual Course Course { get; set; } public virtual Student Student { get; set; } }
Ici, CourseID et StudentId sont les deux clés étrangères
Maintenant, j’ai un autre cours Course.cs où nous allons créer plusieurs relations.
public class Course { public int CourseID { get; set; } public ssortingng Title { get; set; } public int Credits { get; set; } public virtual ICollection Enrollments { get; set; } }
J’espère que cela aidera !!!