2012-10-16 9 views
8

facile da seguire esempi di CRD (Create, Read, Delete) appaiono in MSDN hereCome inserire l'U nel provider di tipi F # CRUD?

C'è una bella link on the page to a script per fare un database di test, e l'ho fatto così, e facilmente ottenuto tutti gli esempi che lavorano per CRD .

Non ci sono ancora a portata di mano sotto-intestazioni sulla pagina per CRD:

(creare righe) http://msdn.microsoft.com/en-us/library/hh361033.aspx#BKMK_UpdateDB

(Leggi le righe) http://msdn.microsoft.com/en-us/library/hh361033.aspx#BKMK_QueryData

(eliminare righe) http://msdn.microsoft.com/en-us/library/hh361033.aspx#BKMK_DeleteRows

Quello chiamato BKMK_UpdateDB non fa l'U in CRUD. Il suo nome dice Update, ma in realtà fa la C in CRUD.

se ho perso where on this page viene mostrata la U in CRUD, appena mi spara ora e smettere di leggere ...

Potrebbe uno dei guru qui si prega di fornire un piccolo aiuto?

Per alleggerire il carico di lavoro per il guru: Di seguito è il codice più o meno come appare su the MSDN web page.

Basta eseguire il test-database-create .sqlnella pagina Web, modificare la stringa SqlDataConnection nel codice seguente per il server e il nome del database, dovrebbe funzionare correttamente.

Si noti che l'unica modifica apportata alla query è ottenere solo una riga da aggiornare. Ora viene restituita esattamente una riga. Sembra più importante vedere il caso semplice di una riga modificata. Almeno quello prima di mostrare più cambiamenti alla volta.

Un guru può modificare le ultime 4 righe nel modo consigliato F # -Type-Provider per apportare una modifica ai dati restituiti dalla query e scrivere quella riga modificata nel database?

Ad esempio, modificare row.TestData1 da 10 a 11 e scriverlo nel db.

Riassumendo: lo MSDN page rende semplice per noi F # -Type-Provider principianti a fare il CRD in CRUD.

Un guru può riempire noi neofiti nel giusto/facile modo F # -Type-Provider per fare l'U in CRUD?

Grazie mille!

#r "System.Data.dll" 
#r "FSharp.Data.TypeProviders.dll" 
#r "System.Data.Linq.dll" 
open System 
open System.Data 
open System.Data.Linq 
open Microsoft.FSharp.Data.TypeProviders 
open Microsoft.FSharp.Linq 

type dbSchema = SqlDataConnection<"Data Source= --yourServer\yourInstance--;Initial Catalog= --YourTestDatabaseFromTheScript--;Integrated Security=SSPI;"> 
let db = dbSchema.GetDataContext() 
let table1 = db.Table1 

query { for row in db.Table1 do 
     where (row.TestData1 <= 10) 
     select row } 
    |> Seq.iter (fun row -> printfn "%d %s" row.TestData1 row.Name) 
+0

"* Se mi manca dove in questa pagina viene visualizzata l'U in CRUD, basta spararmi ora e interrompere la lettura ... *" Bene, hai pubblicato il codice per l'interrogazione quando chiedevi informazioni sull'aggiornamento, invece del codice per in aggiornamento. :-P – ildjarn

risposta

11

non ho avuto la possibilità di provare ancora i nuovi query espressioni - quindi questa è solo una supposizione:

query { for row in db.Table1 do 
    where (row.TestData1 <= 10) 
    select row } 
    |> Seq.iter (fun row -> 
     // Update the row with some new value. 
     row.TestData1 <- row.TestData1 + 1) 

// Now, call .SubmitChanges() to execute the SQL and update the database 
try 
    db.DataContext.SubmitChanges() 
    printfn "Successfully updated the rows." 
with 
    | exn -> printfn "Exception:\n%s" exn.Message 

Il codice sul this page dà un altro esempio di come funziona, anche se in C#. Fondamentalmente, l'espressione F # query è (in questo caso) semplicemente avvolgente Linq-to-SQL; quindi se il codice che ho postato non funziona, dovresti dare un'occhiata ad alcuni dei nuovi esempi di .NET 4.5 di Linq-to-SQL con C#.

+1

Grazie, Jack.Buona supposizione: ho testato il tuo codice, funziona perfettamente. – brucer10

Problemi correlati