Open bricelam opened 7 years ago
See also #2919
This in fact part of #2919, but I like the level of detail here.
Has there been any progress with this? Ordering navigation properties still does not translate into the expected ordering in EFC5.0.5
var form = _db.Forms
.Include(x => x.Sections)
.ThenInclude(x => x.Rows.OrderBy(y => y.Order)) //Nope!
.ThenInclude(x => x.Fields.OrderBy(y => y.Order)) //Nope here too!
.ThenInclude(x => x.FieldType)
.AsSplitQuery()
.SingleOrDefaultAsync(x =>
x.Id == formId)
If there is no intention of ever fixing this, it might be best to show a warning when an attempt to order a navigation property is made to avoid confusion.
+1 for this issue. double order bys doing nothing is very annoying especially for more complex objects
+1 for this issue. double order bys doing nothing is very annoying especially for more complex objects
Hey, I believe this will be fixed in 6.0r5
Please see #24706
Thanks
Related: #15585
I believe a variant of this problem is that if the included entities are of the same type (i.e. in the same table) as the primary entities. If the OrderBy specified in the include is inconsistent with the OrderBy of the primary selection, then evidently the OrderBy of the include is ignored.
This makes it more challenging to load a tree structure from a table and have the tree nodes sorted one way in the main selection (say, by name) while having the included children sorted a different way (say, by child relative position).
This is also something that should be used for any collections mapped to JSON columns. By having a reasonable guarantee that the order is preserved we can issue partial updates that don't affect other items in the collections. We need to modify how the collections are populated by the change tracker, so that even if some of the items were already tracked we apply the order coming from the query results.
I don't understand how the proposed feature would work. If you add a new LineItem without having loaded any Orders or LineItems, what value would it use for OrderIndex?
@stevendarby We would probably restrict this to owned collections, so there has to be always a containing Order whenever a LineItem is added.
We should support specifying an index column for collection navigation properties so that the order can be maintained transparently.
With types like this...
...configured something like this...
...a table like this would be created.
Then whenever
Order.LineItems
is loaded, the order would be guaranteed.