3

J'ai vu Ordering sub-items within ordered items in a Linq to Entities Query qui suggère qu'il n'existe aucun moyen d'obtenir que le référentiel renvoie des sous-éléments dans un graphe d'entité dans un ordre spécifique.Commande de sous-éléments Entity Framework pour EditorFor

Si c'est juste, des idées sur la façon de commander les articles dans un EditorFor?

à savoir

//This works but returns a random order 
<%: Html.EditorFor(model => model.HPERDET.HORDERS) %> 


//This errors with "Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions." 
<%: Html.EditorFor(model => model.HPERDET.HORDERS.OrderBy(m=>m.APP_DATE)) %> 

//presorting the HORDERS into 
//a public IOrderedEnumerable<HORDER> SortedHorders { get; set; } 
//and ordering in my view model works, but breaks the binding because 
//the generated html inputs no longer have the correct hierarchical names 
<%: Html.EditorFor(model => model.SortedHorders) %> 

Ainsi est-il un moyen de trier les sous-entités dans le graphique afin de les utiliser avec EditorFor sans avoir recours à assembler des objets POCO dupliquant les EF en tout, mais l'ordre?

Répondre

1

Ceci est un excellent cas pour un ViewModel. ViewModels encapsule le modèle Entity Framework et présente les données de la manière requise par la vue pour laquelle elles ont été conçues. Effectuez le tri dans le ViewModel et liez le EditFor à la propriété personnalisée.

+0

J'utilise déjà un ViewModel pour transmettre des données supplémentaires, mais comme les retours EF sont assez importants, j'essayais d'éviter de parcourir et de copier dans des objets POCO. Quand vous dites "envelopper le modèle EF", voulez-vous dire "Wrap" ou "répliquer le contenu mais réglé pour afficher": dans ce cas, tout ce que j'ai besoin de changer est la commande donc copier dans mes propres classes coûte cher. – Andiih

+0

@Aniih, je pense que vous essayez de micro-optimiser. Généralement, tout ce que vous attendez de vos utilisateurs à l'aise sur l'écran n'est pas assez grand pour vous inquiéter de la copie. – jfar

+0

Vous avez probablement raison, mais la situation est que j'affiche un grand graphique (arborescence) d'informations réduit puis permettant à l'utilisateur de choisir les informations qu'ils voient avec jQuery. Peut-être que je devrais le faire avec AJAX à la place, mais envoyer tout dans un slug (c'est un intranet donc la bande passante de transmission n'est pas un problème) semblait être une bonne idée. Je vais essayer la copie et voir comment je vais. – Andiih