我正在使用类型提供程序将数据插入SQL Server数据库。我想要插入的条目的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
答案 0 :(得分:1)
对不起,我没有指出foo是seq。这似乎是个问题。
做一个|>在InsertAllOnSubmit之前的foo上的Seq.toList完成了这个技巧,我现在能够看到ID。
答案 1 :(得分:0)
你确定吗?我不知道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()
给我这个:
其中Number来自x,而ID是主键,Identity Column。
修改强>
我知道,在这种情况下,您希望从data
获取ID。然后强制枚举(或将数据保存在数组/列表中)是我所知道的唯一方法。 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; ...]