/ / Cómo manejar la matriz SQL Version y C # byte en consultas Linq - servidor SQL, entidad-framework, linq, rowversion

Cómo manejar la versión Sql y la matriz de bytes C # en las consultas de Linq - sql-server, entity-framework, linq, rowversion

Utilizamos el marco de entidades para almacenar nuestras entidades enla base de datos. Usamos el patrón de repositorio para envolver consultas Linq bastante complicadas. Queremos probar de forma unitaria estas consultas contra simples en colecciones de memoria. Todo esto está bien y bien hasta que encontramos consultas que ordenan en la versión de tipo sql rowversion para encontrar el último registro agregado en un conjunto. EntityFramework es capaz de convertir este Linq a SQL.

La versión de la fila se convierte en una matriz de bytes por C #, ya que es demasiado grande para ajustarse a un ulong (?) Cuando los objetos se rehidratan de la base de datos.

Así que agregamos estos arreglos de bytes a nuestra prueba de memoriadatos. Sin embargo, si ejecutamos consultas en nuestro conjunto de memoria, el Linq explota ya que una matriz de bytes no es comparable, por lo que no puede realizar la clasificación necesaria.

Así que escribimos un comparador que funciona en matrices de bytes, cuando utilizamos este comparador en nuestras consultas, funcionan bien en la memoria.

Pero ahora LinqToEntities no puede manejar las consultas con el comparador.

Parecemos atrapados en una captura de 22 ...

¿Alguien tiene una solución que funcione en memoria y en LinqToEntities?

Respuestas

0 para la respuesta № 1

Esto parece una solución alternativa si se combina con la implementación Compare(this byte[]... como su comparador:

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