J'ai cette requête LINQ:Entity Framework 4.0 avec Sql Compact Edition 4.0 - Non implémenté Exception
var children = DataContext.Entities.Nodes
.Where(n => n.Parent.Name == node.Key)
.OrderBy(n => n.SortOrder);
foreach (var child in children)
var childNode = CreateNode(child);
Lorsque vous utilisez SQL Server, tout fonctionne bien. Cependant, lors de l'utilisation SQLCE, je reçois l'erreur suivante:
[SqlCeException (0x80004005): Not implemented]
System.Data.SqlServerCe.SqlCeDataReader.ProcessResults(Int32 hr) +125
System.Data.SqlServerCe.SqlCeDataReader.IsEndOfRowset(Int32 hr) +131
System.Data.SqlServerCe.SqlCeDataReader.Move(DIRECTION direction) +376
System.Data.SqlServerCe.SqlCeDataReader.Read() +95
System.Data.Common.Internal.Materialization.Shaper`1.StoreRead() +44
[EntityCommandExecutionException: An error occurred while reading from the store provider's data reader. See the inner exception for details.]
System.Data.Common.Internal.Materialization.Shaper`1.StoreRead() +130
System.Data.Common.Internal.Materialization.SimpleEnumerator.MoveNext() +46
Toute idée de ce qui se passe ici?
J'ai même essayé d'appeler ToArray()
avant foreach
, mais cela n'a pas aidé.
EDIT:
Si je change la requête:
var children = DataContext.Entities.Nodes
.Where(n => n.Parent.Name == node.Key)
.ToArray()
.OrderBy(n => n.SortOrder);
Il fonctionne ... pourquoi?
EDIT 2: BTW les points de navigateur Parent
à la même table, de sorte que chaque Node
peut avoir {0..1} parent Node
.
Je recevais une erreur similaire dans mon code EF, mais je crois que c'était une exception de blocage sur la transaction. Je me demande si le ToArray avant OrderBy ne fait que forcer le traitement dans votre code C# plutôt que dans la base de données, réduisant ainsi le temps de traitement dans la base de données, réduisant ainsi la probabilité d'un blocage dans la base de données? –
@deverop Avez-vous trouvé une solution à ce problème ou passez-vous à Microsoft? Je vois quelque chose de similaire sans Entity Framework mais il est plus difficile à reproduire. Avez-vous un exemple complet? – Travis
@Travis Non, je n'ai pas trouvé la solution et je n'ai pas escaladé. J'ai fini par changer la requête et la décomposer en appelant 'ToArray()' avant de trier. –