Domanda

Abbiamo un progetto in cui accedere al livello DB (MS SQL) con LINQ. Ora possiamo cambiare il nostro livello DB in file XML e continuare ad accedervi con lo stesso LINQ?

Vogliamo aggiungere la possibilità di archiviare i dati in un singolo file XML o in un set di file XML.

L'attuale codice LINQ to SQL è simile a:

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;
È stato utile?

Soluzione

LINQ to SQL e LINQ to XML hanno somiglianze, ma non sono identici. Le query LINQ potrebbero probabilmente essere scritte in modo da poter essere utilizzate allo stesso modo, ma probabilmente il codice delle query stesse dovrà cambiare.

Potresti fornire alcuni esempi di come appare il tuo attuale codice LINQ to SQL? Includere esempi del tipo di dati che stai usando e di come vuoi formattare l'XML probabilmente aiuterebbe le persone qui a fornire indicazioni più specifiche.

Modifica: la tua prima query sembra restituire un oggetto. Se LINQ to SQL e LINQ to XML restituiscono entrambi lo stesso tipo, è possibile sostituirli senza modificare il codice che consuma il risultato.

La tua seconda query sembra restituire un bool, quindi lo stesso concetto si applica a quello. Il codice altrove nella tua soluzione non importerà come è stato impostato quel bool.

Il suggerimento di Mike di utilizzare un'interfaccia per il tuo livello di accesso ai dati è la strada da percorrere. Per i tuoi 2 esempi, avresti un'interfaccia che contiene un oggetto Organization e un bool. Le implementazioni SQL e XML sarebbero diverse, ma ogni altra parte del codice dovrebbe solo sapere come utilizzare l'interfaccia.

Altri suggerimenti

C'è un ulteriore passo che dovrai fare: dovrai caricare l'XML in un XDocument (o in un XNode se ricordo bene) prima di poter interrogare i tuoi dati.

Dopodiché si tratta semplicemente di selezionare nodi in un albero con sintassi LINQ to XML.

Sfortunatamente, non esiste una sintassi LINQ che ti permetta di interrogare entrambi e di collegare in modo trasparente XML o DB.

PS. Presta attenzione allo spazio dei nomi XML quando selezionerai i nodi, potrebbe essere un mal di testa!

PS2. Spiacenti, non ho il codice a portata di mano

PS3. Suggerirei che il tuo livello di database derivi da un'interfaccia, in questo modo sarai in grado di passare da XML a DB e viceversa facilmente

Spero che questo aiuti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top