2012-10-16 4 views
8

Łatwy do naśladowania przykłady CRD (Create, Read, Delete) pojawiają się w MSDN hereJak umieścić U w F # Type Provider CRUD?

Jest miły link on the page to a script do testowej bazy danych, i tak zrobiłem, i łatwo dostaje wszystkie przykłady pracujących dla CRD .

Istnieją nawet poręczne sub-nagłówki na stronie CRD:

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

(Czytaj wiersze) http://msdn.microsoft.com/en-us/library/hh361033.aspx#BKMK_QueryData

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

The jednego o nazwie BKMK_UpdateDB nie robi U w CRUD. Jego nazwa mówi Update, ale naprawdę robi C w CRUD.

Jeśli brakowało mi where on this page U w CRUD jest widoczna, po prostu strzelać do mnie teraz i zakończyć czytanie ...

Można guru tutaj proszę podać trochę pomóc?

Aby rozładować ładunek śmieci dla guru: Poniżej znajduje się kod, który pojawia się na the MSDN web page.

Po prostu uruchom bazę danych testowych - utwórz .sql script referred to na stronie internetowej, edytuj łańcuch SqlDataConnection w poniższym kodzie dla serwera i nazwy bazy danych, powinna działać poprawnie.

Należy pamiętać, że jedyną zmianą, którą wprowadziłem w zapytaniu, jest uzyskanie tylko jednego wiersza do zaktualizowania. Teraz zwracany jest dokładnie jeden wiersz. Wydaje się ważniejsze, aby zobaczyć prosty przypadek zmiany jednego wiersza. Przynajmniej to przed wyświetleniem wielokrotnych zmian na raz.

Czy guru może zmienić ostatnie 4 linie w zalecany sposób F # -Type-Provider, aby wprowadzić zmiany w danych zwracanych przez zapytanie i zapisać zmieniony wiersz w bazie danych?

Na przykład zmień wiersz.TestData1 z 10 na 11 i zapisz go w bazie danych.

Podsumowując: MSDN page ułatwia nam F # -Type-Provider początku robi CRD w CRUD.

Czy guru może podać nam nowicjuszy na prawym/łatwym F # -Type-Provider sposób zrobić U w CRUD?

Wielkie dzięki!

#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

"Jeśli przegapię to, gdzie na tej stronie wyświetla się U w CRUD, po prostu zastrzel mnie teraz i przestań czytać ... *" Cóż, napisałeś kod do zapytania, gdy pytasz o aktualizację, zamiast kodu aktualizowanie. :-P – ildjarn

Odpowiedz

11

Nie miałem okazję spróbować jeszcze nowych query wyrażeń - tak to jest tylko przypuszczenie:

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 

Kod na this page daje kolejny przykład, jak to działa, aczkolwiek w języku C#. Zasadniczo wyrażenie F # query jest (w tym przypadku) po prostu owija Linq-SQL; więc jeśli napisany przeze mnie kod nie działa, powinieneś rzucić okiem na niektóre z nowych przykładów .NET 4.5 Linq-to-SQL z C#.

+1

Dziękuję, Jack.Zgadywanie - testowałem twój kod, działa dobrze. – brucer10