2010-07-27 9 views
1

J'ai deux classes:base de données mise à jour n: n

public class RichMan 
{ 

public string ID {get;set;} 
List<Car> _cars=new List<Car>(); 
{ 
    public List<Car> Cars 
    { 
    get 
       { 
        return this._cars; 
       } 
       set 
       { 
        this._cars = value; 
        NotifyChanged("Email"); 
       } 

    } 

}

et

public class Car 
{ 
public string ID {get;set;} 
} 

et 3 tables:

RichMan 
ID int 

Cars: 
ID int 

and CarsOfRichmen 

idcar int (FK) 
idrichman (FK) 

Si collection de voitures de richamn changerait comment le faire sur la base de données?

Supprimer tous les enregistrements de CarsOfRichmen où idrichman est id de mon richam, puis dans foreach ajouter des realtions à CarsOfRichmen?

Est-ce une bonne pratique?

Répondre

3

Non, ce n'est pas une bonne pratique.

Les voitures peuvent avoir d'autres informations liées; les changements dans les voitures peuvent déclencher d'autres actions.

Vous devez simplement Ajouter/Supprimer/Mettre à jour les voitures pertinentes [EDIT] et/ou CarsOfRichmen ...

+0

Quand quelques riches ont vendu sa voiture je ne veux pas changer de collection dans Table Cars. – user278618

2

Il y a au moins 3 modèles que je connais ici:

1) par Pascal - Analysons les scénarios «avant» et «après», puis appliquez le delta correspondant aux données (insérer, mettre à jour et supprimer) des liens si nécessaire.

2) Supprimer les liens comme vous l'avez suggéré (mais pas les voitures) est un modèle assez courant. Vous devriez cependant avoir une certaine forme de capacité de journalisation/audit afin que vous puissiez recréer ce qui s'est passé.

3) L'autre modèle commun consiste à ajouter une date de/date à la plage sur les liens et les version de cette façon. Les performances peuvent toutefois être dégradées car les liaisons s'empilent assez rapidement.

+0

J'ai dû faire des variations à ce sujet plusieurs fois, et je pense que vous avez couvert les possibilités. (1) est généralement trop difficile. (2) est ce que je me retrouve généralement avec. (3) peut rendre toutes vos questions beaucoup plus compliquées. On pourrait implémenter ceci avec une vue qui sélectionne seulement les lignes 'actives' et l'utilise comme table de liens; cela enregistre toutes les difficultés avec les requêtes. –

Questions connexes