Pregunta

Tenemos un proyecto en el que accedemos a la capa DB (MS SQL) con LINQ. ¿Podemos ahora cambiar nuestra capa de base de datos a archivo XML y aún acceder a ella con el mismo LINQ?

Queremos agregar la posibilidad de almacenar datos en un solo archivo XML o un conjunto de archivos XML.

El código LINQ to SQL actual se ve así:

result = (from e in db.Organizations
          where e.Id == idOrganization
          select e).SingleOrDefault();

o

 result = (from e in db.Organizations
           where e.Name.Trim().ToUpper() == organizationName.Trim().ToUpper()
               && e.Id!=idCurrentOrganization
           select e).Count()>0;
¿Fue útil?

Solución

LINQ to SQL y LINQ to XML tienen similitudes, pero no son idénticas. Las consultas LINQ probablemente podrían escribirse de modo que puedan usarse de la misma manera, pero el código de las consultas probablemente necesite cambiar.

¿Podría dar algunos ejemplos de cómo se ve su código LINQ to SQL actual? Incluir ejemplos de qué tipo de datos está utilizando y cómo desea formatear el XML probablemente ayudaría a las personas aquí a dar punteros más específicos.

Editar: parece que su primera consulta devuelve un objeto. Si su LINQ to SQL y su LINQ to XML devuelven el mismo tipo, puede cambiarlos sin cambiar el código que consume el resultado.

Su segunda consulta parece devolver un bool, por lo que el mismo concepto se aplica a esa. El código en otra parte de su solución no le importará cómo se estableció ese valor.

La sugerencia de Mike de usar una interfaz para su capa de acceso a datos es el camino a seguir. Para sus 2 ejemplos, tendría una interfaz que contiene un objeto Organización y un bool. Sus implementaciones de SQL y XML serían diferentes, pero cualquier otra parte de su código solo necesitaría saber cómo usar la interfaz.

Otros consejos

Hay un paso adicional que tendrá que hacer: deberá cargar el XML en un XDocument (o un XNode si recuerdo correctamente) antes de poder consultar sus datos.

Después de eso, se trata simplemente de seleccionar nodos en un árbol con sintaxis LINQ to XML.

Desafortunadamente, no hay una sintaxis de LINQ que le permita consultar ambos y conectar el XML o la base de datos de forma transparente.

PS. Preste atención al espacio de nombres XML cuando seleccione nodos, ¡podría ser un dolor de cabeza!

PS2. Lo siento, no tengo código a mano

PS3. Sugeriría que su capa de base de datos se derive de una interfaz, de esa manera usted será capaz de cambiar de XML a DB y viceversa fácilmente

Espero que esto ayude

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top