La programmazione del database F # è uguale alla programmazione del database C #?

StackOverflow https://stackoverflow.com/questions/1802052

  •  05-07-2019
  •  | 
  •  

Domanda

Affinché f # parli con un database, suppongo che ti rivolgi a un codice che assomiglia molto al codice C #, usando alcune librerie NET (ado.net per esempio) e un sacco di codice imperativo che ha, per definizione , molti effetti collaterali ..

O mi sto perdendo qualcosa qui? F # ha qualche bellezza da offrire anche in questo dominio?

E qualcuno sarebbe così gentile da fornirmi un esempio sia per leggere da una scrittura su un database?

È stato utile?

Soluzione

Potresti voler utilizzare la risposta accettata in questa domanda come un buon punto di partenza.

Principiante F #: recupero di una matrice di dati da un server

A seconda del database che stai utilizzando potresti avere altre scelte, ma inizia con qualcosa di abbastanza funzionale e puoi migliorarlo man mano che acquisisci esperienza.

Altri suggerimenti

Quando dovevo fare un po 'di accesso al database da F # in un progetto di test, ho finito per usare LINQ to SQL da F #. Ho appena aggiunto un progetto C # alla soluzione, ho inserito DataContext nel progetto C # e ho usato le classi CQ LINQ generate in SQL nel mio progetto F #.

Per prima cosa devi fare riferimento agli assembly FSharp.PowerPack e FSharp.PowerPack.Linq . Quindi puoi aprire Microsoft.FSharp.Linq .

Ecco un esempio che analizza " Sito " tag da un XDocument, creando istanze della classe Site (una classe LINQ to SQL generata da C #), quindi inserendole nel database usando il contesto di dati L2S.

let sites = doc.Descendants(ns + "Site")
            |> Seq.map (fun el -> new Site (
                                      Url = xstr(el.Element(ns + "DataUrl")),
                                      Rank = xint(el.Element(ns + "Rank"))
                                  ))
use db = new SomeDataContext()
db.Sites.InsertAllOnSubmit(sites)
db.SubmitChanges()

Come puoi vedere, anche se sta usando le classi C #, non è un codice assolutamente imperativo.

Ecco un esempio dell'uso della versione F # di LINQ per trovare il grado massimo di tutte le voci del sito nel database. Sì, questo viene tradotto in SQL ed eseguito nel database.

use db = new SomeDataContext()
Query.query <@ seq { for s in db.Sites -> s.Rank } |> Seq.max @>

Infine, ecco alcuni maggiori informazioni su LINQ con F # .

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