2009-07-18 3 views
1

Selon la réponse de Dylan pour les questions 'Using The Repository Pattern, Is It Best To Save Parent and Children Objects Together Or Separately?', un référentiel enregistre l'agrégat entier (parent et enfants).Comment va-t-on à propos de l'enregistrement d'un agrégat (parent et enfants) dans un référentiel?

Comment va-t-on à ce sujet, serait-ce codé dans la procédure réellement stockée (si vous les utilisez); appelleriez-vous les dépôts enfants et ...

par exemple, ayant une classe parente Pays avec une liste des enfants de la ville:

class Country 
{ 
    List<City> cities; 
    ... 
} 

et un extrait du référentiel:

public Save(Country country) 
{ 
    ... 

    ICityRepository cityRepository = new CityRepository(); 

    foreach (City city in country.Cities) 
    { 
     cityRepository.Save(city); 
    } 

    ... 
} 

ou Y a-t-il une meilleure alternative?

De même, l'appel du référentiel enfant comme dans l'exemple ci-dessus a-t-il de lourdes conséquences sur les performances s'il y a beaucoup d'enfants?

Répondre

0

Vous pouvez transmettre les objets city à la procédure stockée country en tant que xml.

Ensuite, il suffit d'une requête de mise à jour/insertion/suppression pour les corriger tous.

1

Si le pays est la racine agrégée, ce qui dans votre cas semble être le cas, vous ne devriez pas avoir de référentiel séparé pour les villes. Les référentiels ne sont nécessaires que pour les racines agrégées. Alors oubliez ICityRepository/CityRepository et enregistrez simplement les villes elles-mêmes dans votre dépôt de pays.

Questions connexes