/ / Come gestire l'array di byte Sql Version e C # nelle query Linq - sql-server, entity-framework, linq, rowversion

Come gestire l'array di byte Sql Version e C # nelle query Linq - sql-server, entity-framework, linq, rowversion

Utilizziamo la struttura delle entità per memorizzare le nostre entità inil database. Usiamo il modello di repository per avvolgere query Linq piuttosto complicate. Vogliamo testare queste query con unità semplici in raccolte di memoria. Tutto ciò va bene e bene fino a quando non ci siamo imbattuti in query che ordinano sul rowversion di tipo sql per trovare l'ultimo record aggiunto in un set. EntityFramework è in grado di coprire questo Linq in SQL.

La versione di riga viene convertita in un array di byte da C # in quanto è troppo grande per adattarsi a un ulong (?) Quando gli oggetti vengono reidratati dal database.

Quindi aggiungiamo questi array di byte al nostro test in memoriadati. Tuttavia, se eseguiamo interrogazioni contro il nostro set di memoria, Linq esplode come una matrice di byte non confrontabile, quindi non può eseguire l'ordinamento necessario.

Quindi abbiamo scritto un comparatore che funziona su array di byte, quando usiamo questo comparatore nelle nostre query funzionano bene in memoria.

Ma ora LinqToEntities non è in grado di gestire le query con il comparatore.

Sembriamo bloccati in una presa 22 ...

Qualcuno ha una soluzione che funzioni in memoria e in LinqToEntities?

risposte:

0 per risposta № 1

Questo sembra un aggiramento se lo si combina con l'implementazione Compare(this byte[]... come tuo comparatore:

https://stackoverflow.com/a/19402565/2557128