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示例.