SELECT
table1.*
, table2.*
INNER JOIN table2 ON table2.SomeFkId = table1.SomeId
Qui vous obtient un ensemble de résultats où les lignes enfants dans table2 cause de la duplication par le retour de la table1 résultats pour chaque enfant en ligne dans la table2. O/R mappeurs doit différencier table1 instances basées sur un champ de clé unique, puis d'utiliser toutes les table2 colonnes à remplir les instances enfant.
SELECT table1.*
SELECT table2.* WHERE SomeFkId = #
Le N+1, où la première requête remplit l'objet primaire et la deuxième requête remplit tous les objets enfants pour chaque de la primaire unique des objets retournés.
Considérer:
class House
{
int Id { get; set; }
string Address { get; set; }
Person[] Inhabitants { get; set; }
}
class Person
{
string Name { get; set; }
int HouseId { get; set; }
}
et des tables avec une structure similaire. Une seule requête à l'adresse "22 de la Vallée de Saint" peut renvoyer:
Id Address Name HouseId
1 22 Valley St Dave 1
1 22 Valley St John 1
1 22 Valley St Mike 1
L'O/RM doit remplir une instance de la Maison avec l'ID=1, Address="22 de la Vallée de Saint" puis de renseigner les Habitants de tableau avec des Gens instances pour Dave, John et Mike avec une seule requête.
Un N+1 de la requête de la même adresse ci-dessus aurait pour résultat:
Id Address
1 22 Valley St
avec une requête distincte, comme
SELECT * FROM Person WHERE HouseId = 1
et résultant dans un autre ensemble de données, comme
Name HouseId
Dave 1
John 1
Mike 1
et le résultat final serait le même que ci-dessus avec la même requête.
Les avantages de sélection unique est que vous obtenez toutes les données à l'avant qui peut être ce que vous désirez. Les avantages à N+1 de la requête de la complexité est réduite et vous pouvez utiliser le chargement paresseux où l'enfant ensembles de résultats sont chargés uniquement lors de la première demande.