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

时间:2012-10-16 02:05:33

标签: linq linq-to-sql f# type-providers

易于理解的CRD示例(创建,阅读,删除)出现在MSDN here

制作一个测试数据库有一个很好的link on the page to a script,我这样做了,很容易让所有的例子都适用于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.

如果我错过了where on this page显示了CR中的U,那就现在就开枪给我,然后退出阅读......

请问这位大师之一请提供一些帮助吗?

减轻大师的垃圾工作量:下面的代码几乎与the MSDN web page上的代码相同。

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

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

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

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

总结:MSDN page使我们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)

1 个答案:

答案 0 :(得分: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

this page上的代码给出了另一个如何工作的例子,尽管是在C#中。基本上,F#query表达式(在本例中)简单地包含Linq-to-SQL;所以,如果我发布的代码不起作用,你应该看一下使用C#的Linq-to-SQL的一些新的.NET 4.5例子。