F# 在 SubmitChanges 之后获取 ID(使用 SQLDataConnection 类型提供程序)

F# obtaining ID after SubmitChanges (using SQLDataConnection type provider)

我正在使用类型提供程序将数据插入 SQL 服务器数据库。我想要刚刚插入的条目的 ID。在 C# 中,我可以在调用 SubmitChanges() 后从 "foo" 访问 ID。在 F# 中,这不会发生在我身上。它与不变性有关吗?有没有一种方法可以访问这些 ID 而无需再次调用数据库?

foo
|> dbContext.MyTable.InsertAllOnSubmit
dbContext.DataContext.SubmitChanges()

//data in foo gets added, but Ids are all 0.
//In MyTable, Id is an int identity(1,1) primary key

抱歉,我没有指出 foo 是一个序列。这似乎是问题所在。

在 InsertAllOnSubmit 之前对 foo 执行 |> Seq.toList,我现在可以看到 ID。

你确定吗?我不知道 foo 中有什么,但插入序列应该可以。例如:

let dbx = dbSchema.GetDataContext()
let x = seq { 1L..1000L}
let data = seq {for i in  x -> dbSchema.ServiceTypes.Table_1(Number = i)}
dbx.Table_1.InsertAllOnSubmit(data)
dbx.DataContext.SubmitChanges()

给我这个:

其中数字来自 x,ID 是主键,标识列。

编辑

我明白了,在这种情况下,您想从 data 获取 ID。然后强制枚举(或将数据保存在 array/list 中)也是我所知道的唯一方法。 DataContext 可能有一些选项。

let data = [for i in  x -> dbSchema.ServiceTypes.Table_1(Number = i)]
//let data' = data |> Seq.toList
dbx.Table_1.InsertAllOnSubmit(data)
dbx.DataContext.SubmitChanges()

query { for row in data do 
        select row.ID }  

val it : seq = seq [10001L; 10002L; 10003L; 10004L; ...]