2012-10-16 42 views
8

dễ làm theo tấm gương của CRD (Create, Read, Delete) xuất hiện trong MSDN hereLàm thế nào để đặt U trong F # Loại nhà cung cấp CRUD?

Có một đẹp link on the page to a script để tạo ra một cơ sở dữ liệu kiểm tra, và tôi đã làm như vậy, và dễ dàng nhận được tất cả các ví dụ làm việc cho CRD .

Thậm chí còn tiện dụng phụ tiêu đề trên trang cho CRD:

(Tạo hàng) http://msdn.microsoft.com/en-us/library/hh361033.aspx#BKMK_UpdateDB

(đọc hàng) http://msdn.microsoft.com/en-us/library/hh361033.aspx#BKMK_QueryData

(Xóa hàng) http://msdn.microsoft.com/en-us/library/hh361033.aspx#BKMK_DeleteRows

Một gọi là BKMK_UpdateDB không làm U trong CRUD. Tên của nó nói Update, nhưng nó thực sự là C trong CRUD.

Nếu tôi bỏ lỡ where on this page U trong CRUD được hiển thị, chỉ cần bắn tôi ngay bây giờ và bỏ đọc ...

Có thể một trong những guru của ở đây vui lòng cung cấp một chút giúp đỡ?

Để làm giảm tải công việc cho guru: Dưới đây là mã khá giống như xuất hiện trên the MSDN web page.

Chỉ cần chạy cơ sở dữ liệu thử nghiệm tạo .sql script referred to trên trang web, chỉnh sửa chuỗi SqlDataConnection trong mã bên dưới cho máy chủ và tên cơ sở dữ liệu của bạn, nó sẽ chạy tốt.

Lưu ý rằng thay đổi duy nhất tôi thực hiện cho truy vấn là chỉ nhận được một hàng để cập nhật. Bây giờ chính xác một hàng được trả về. Có vẻ quan trọng hơn khi thấy trường hợp đơn giản của một hàng đã thay đổi. Ít nhất là trước khi hiển thị nhiều thay đổi cùng một lúc.

Guru có thể thay đổi 4 dòng cuối thành cách F # -ype-Provider được đề xuất để thực hiện thay đổi đối với dữ liệu được truy vấn trả về và viết hàng đã thay đổi đó vào cơ sở dữ liệu không? Ví dụ: thay đổi hàng.TestData1 từ 10 đến 11 và ghi nó vào db.

Tổng hợp: MSDN page giúp chúng ta dễ dàng F # -Type-Nhà cung cấp mới làm CRD trong CRUD.

Guru có thể điền vào chúng tôi những người mới ở bên phải/dễ F # -Type-nhà cung cấp cách để làm U trong CRUD?

Rất cám ơn!

#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

"* Nếu tôi bỏ lỡ nơi trên trang này thì U trong CRUD được hiển thị, chỉ cần bắn tôi ngay bây giờ và bỏ đọc ... *" Vâng, bạn đã đăng mã để truy vấn khi hỏi về cập nhật, thay vì mã cho đang cập nhật. :-P – ildjarn

Trả lời

11

tôi đã không có cơ hội để thử query biểu mới được nêu ra - vì vậy đây chỉ là một phỏng đoán:

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 

Các mã trên this page cho một ví dụ về cách làm việc này, mặc dù trong C#. Về cơ bản, biểu thức F # query là (trong trường hợp này) chỉ cần gói Linq-to-SQL; vì vậy nếu mã tôi đăng không hoạt động, bạn nên xem xét một số ví dụ .NET 4.5 mới của Linq-to-SQL với C#.

+1

Cảm ơn, Jack.Tốt đoán - Tôi đã thử nghiệm mã của bạn, hoạt động tốt. – brucer10

Các vấn đề liên quan