2017-09-29 4 views
0

Je teste le scénario suivant (code ci-dessous): créer un centre commercial, avec des magasins, avec des caissiers, avec des caisses et des personnes qui l'exploitent.Entity Framework: comment résoudre le tableau dans le tableau

J'ai donc créé les classes suivantes

  • Table Mall
  • Tableau Boutique
  • Tableau cashdesk
  • Tableau Personne

Classes de base avec un ID et un nom. Puis j'ai besoin d'une classe dérivée de Person étant PersonCashier ou PersonCustomer.

Comme tout est lié, j'ai besoin de créer des tables d'intersection pour les scénarios plusieurs à plusieurs.

J'ai créé les tables d'intersection suivantes:

  • Le centre commercial contient des magasins: MallShop
  • La boutique contient caisse: MallShopCashDesk
  • Et le cashdesk contenant caissiers: MallShopCashDeskPersonCashier

Cela ne me semble pas juste. Quelqu'un peut-il m'aider sur une meilleure pratique

public class Mall 
{ 
    public int Id { get; set; } 
    [Required] 
    [MaxLength(100)] 
    public string Name { get; set; } 
    [Required] 
    public int NumberOfShopSpaces { get; set; } 
} 

public class Shop 
{ 
    public int Id { get; set; } 
    [Required] 
    [MaxLength(100)] 
    public string Name { get; set; } 
} 

public class CashDesk 
{ 
    public int Id { get; set; } 
    [Required] 
    public string Name { get; set; } 
} 
public class Person 
{ 
    public int Id { get; set; } 
    [Required] 
    public string FullName { get; set; } 
    [Required] 
    public string Gender { get; set; } 
} 
public class PersonCashier : Person 
{ 
    [Required] 
    public int ShopId { get; set; } 
    public virtual Shop Shop { get; set; } 
} 

Ce sont les classes de base. Comment dois-je ajouter un magasin à un centre commercial, une caisse à un magasin, et un caissier à une caisse? (Je l'ai essayé beaucoup, mais affichant le code serait faire le look question comme des spaghettis)

Répondre

1
public class Mall 
{ 
    public int Id { get; set; } 
    [Required] 
    [MaxLength(100)] 
    public string Name { get; set; } 
    [Required] 
    public int NumberOfShopSpaces { get; set; } 

    List<Shop> CurrentShops { get; set; } 
} 

public class Shop 
{ 
    public int Id { get; set; } 
    [Required] 
    [MaxLength(100)] 
    public string Name { get; set; } 

    public List<CashDesk> CashDesks { get;set; } 
} 

J'ai ajouté la liste des magasins à la classe Mall et à mes boutiques fermeture des caisses. Cela vous donne une liste de magasins dans le centre commercial, et une liste des caisses dans chaque magasin et vous pouvez suivre cette méthode pour tout ce dont vous avez besoin.

Si vous avez une base de données, vous aurez une table Mall et une table Shop.

La table Boutique peut avoir une clé étrangère pour la table Mall, c'est ainsi que vous les liez et cela fonctionnera avec la structure de classe en haut.

Ou, vous pouvez avoir une autre table appelée MallShops où vous avez 2 champs, l'un étant le MallID, l'autre le ShopID. C'est ce qu'on appelle une table de liaison.

Les deux approches fonctionneront avec la seconde permettant une structure plus complexe avec beaucoup de centres commerciaux liés à beaucoup de magasins.

Je voudrais commencer par la structure de la base de données, assurez-vous de couvrir tout ce dont vous avez besoin, puis vous pouvez faire les classes etc d'une manière qui a du sens.Si vous utilisez quelque chose comme EntityFramework alors il va créer toutes les classes pour vous une fois que votre structure de base de données est prête.

1

S'il s'agit d'un code, EF établira les tables de relations pour vous. Vous avez juste besoin d'ajouter les relations dans vos classes.

Ce que vous devriez exactement savoir n'est pas clair d'après votre description, car cela dépend des relations que vous voulez. si vous voulez un grand nombre-many entre PersonCashier et cashdesk ce serait comme ceci:

public class CashDesk 
{ 
    public List<PersonCashier> Cashiers { get; set; } 
} 

public class PersonCashier : Person 
{ 
    public List<CashDesk> CashDesks { get; set; } 
} 

(ne pas montrer tous les champs par souci de brièveté)