Entity Framework chargement d'enfant de la collection avec l'ordre de tri
J'ai deux tables parent et enfant de la table. L'enfant de la table a une colonne de l'ordre de tri (une valeur numérique). En raison du manque de soutien de l'EF persister un IList inclusive de l'ordre de tri, sans exposer l'ordre de tri (voir: Entity Framework de persistance de l'enfant de la collection de l'ordre de tri) mon enfant de la classe a également une propriété de l'ordre de tri, de sorte que je peux stocker les enfants avec l'ordre de tri.
Contrairement à l'auteur de l'référencé question j'ai essayer de charger les enfants sont toujours triés. Donc, si je charge une instance parent, je m'attends à ce que l'enfant de la collection est triée par ordre de tri. Comment puis-je atteindre ce comportement avec le Premier Code API Fluent et POCO s?
Indice: Ce n'est pas une option pour appeler .De tri(...) sur l'enfant de la collection.
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas l'atteindre directement, car ni la hâte ou le chargement paresseux en EF prend en charge la commande ou de filtrage.
Vos options sont:
OrderBy
La deuxième option peut être utilisée avec le chargement explicite:
Vous pouvez le faire efficacement dans une seule requête, la grammaire est juste maladroite:
Explication
async note
Il m'est arrivé d'utiliser le
async
extensions ici, il est probable que vous devriez utiliser, mais vous pouvez vous débarrasser deawait
/async
si vous avez besoin d'une requête synchrone sans nuire à l'efficacité de l'enfant de tri.Premier morceau
Par défaut, tous les EF objets récupérés à partir de la Db sont "suivis." En outre, EF est l'équivalent de SQL
Select
est conçu autour des Objets Anonymes, qui vous nous voyez en sélectionnant ci-dessus. Quand la Anonyme de l'Objet est créée, les objets assignés àP
etC
sont tous les deux suivis, ce qui signifie que leurs relations et de leur état est maintenu par l'EF Changement de Tracker. DepuisC
une liste d'enfants dansP
, même si vous ne demandez pas à être explicitement liée à votre Objet Anonyme, EF charges comme cet enfant de la collection de toute façon, en raison de la relation qu'il voit dans le schéma.Pour en savoir plus, vous pouvez rompre le ci-dessus en 2 requêtes distinctes, le chargement de l'objet parent, puis vient la liste des enfants, dans un contexte totalement différent Db appels. L'EF Changement de Tracker les avis et charge les enfants dans le parent de l'objet pour vous.
Second morceau
Nous nous sommes trompés EF en retour commandés enfants. Maintenant nous prendre juste le Parent de l'objet - son, les enfants seront toujours jointes, dans l'ordre tout comme nous voulions.
Valeurs null et des Tables de Jeux de
Il y a un peu maladroite 2-étape ici surtout pour les meilleures pratiques autour des valeurs null; elle est là pour faire 2 choses:
De penser à des choses dans la base de données sous la forme d'ensembles jusqu'à ce que le tout dernier moment possible.
Éviter null exceptions.
En d'autres termes, le dernier morceau aurait pu être:
Mais si l'objet n'était pas présent dans la base de données, qui va exploser avec une référence nulle exception. C# 6 va présenter une alternative bien que, la propriété null coalescence de l'opérateur - ainsi, dans le futur, vous pourriez remplacer le dernier bloc avec:
The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
Tous j'ai changé dans votre code a été, je l'ai remplacéFirstOrDefault()
avecToList()
. Toutes les idées ce qui ne va pas?