如何将U放入F#Type提供程序CRUD?

bru*_*r10 9 linq f# linq-to-sql type-providers

易于遵循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.

如果我错过了这个页面上显示的CR中的U,那就现在就开枪给我,然后退出阅读...

请问其中一位大师请给我一点帮助?

为了减轻大师的垃圾工作负荷:下面的代码几乎与MSDN网页上显示的代码相同.

只需运行网页上引用的test-database-create .sql 脚本,在下面的代码中编辑服务器和数据库名称的SqlDataConnection字符串,就可以正常运行了.

请注意,我对查询所做的唯一更改是只获取一行进行更新.现在只返回一行.看起来更重要的是看到一行的简单情况发生了变化.至少在显示多次更改之前.

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

例如,将row.TestData1从10更改为11并将其写入db.

总结: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)
Run Code Online (Sandbox Code Playgroud)

Jac*_* P. 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
Run Code Online (Sandbox Code Playgroud)

这个页面上的代码给出了另一个如何工作的例子,尽管在C#中.基本上,F#query表达式(在这种情况下)只是简单地包装Linq-to-SQL; 因此,如果我发布的代码不起作用,您应该看一下使用C#的Linq-to-SQL的一些新的.NET 4.5示例.