9

易于理解的 CRD 示例(创建、读取、删除)出现在 MSDN此处

页面上有一个很好的链接,指向创建测试数据库的脚本,我这样做了,并且很容易得到所有适用于 CRD 的示例。

CRD 页面上甚至还有方便的子标题:

(创建行)http://msdn.microsoft.com/en-us/library/hh361033.aspx#BKMK_UpdateDB

(读取行)http://msdn.microsoft.com/en-us/library/hh361033.aspx#BKMK_QueryData

(删除行)http://msdn.microsoft.com/en-us/library/hh361033.aspx#BKMK_DeleteRows

名为 BKMK_UpdateDB 的那个不做 CRUD 中的 U。它的名字是 Update,但它确实是 CRUD 中的 C。

如果我错过了此页面上 CRUD 中 U 的显示位置,请立即向我开枪并停止阅读...

请问这里的一位大师可以提供一点帮助吗?

为了减轻大师的垃圾工作量:下面的代码与 MSDN 网页上的代码非常相似。

只需运行网页上提到的 test-database-create .sql脚本,在下面的代码中为您的服务器和数据库名称编辑 SqlDataConnection 字符串,它应该可以正常运行。

请注意,我对查询所做的唯一更改是只更新一行。现在正好返回一行。似乎更重要的是看到一排的简单情况发生了变化。至少在一次显示多个更改之前是这样。

大师能否将最后 4 行更改为推荐的 F#-Type-Provider 方式以更改查询返回的数据,并将更改后的行写入数据库?

例如,将 row.TestData1 从 10 更改为 11 并将其写入数据库。

总结:MSDN 页面让我们 F#-Type-Provider 新手在 CRUD 中做 CRD 很容易。

大师可以请我们新手填写正确/简单的 F#-Type-Provider 方法来在 CRUD 中执行 U 吗?

非常感谢!

#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)
4

1 回答 1

11

我还没有机会尝试新的query表达方式——所以这只是一个猜测:

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# 中。基本上,F#query表达式(在这种情况下)只是简单地包装了 Linq-to-SQL;因此,如果我发布的代码不起作用,您应该查看一些带有 C# 的 Linq-to-SQL 的新 .NET 4.5 示例。

于 2012-10-16T02:35:46.010 回答