Sql server F#提交更改后获取ID(使用SQLDataConnection类型提供程序)
我正在使用类型提供程序将数据插入SQL Server数据库。我想要我刚刚插入的条目的ID。在C#中,我可以在调用SubmitChanges()后从“foo”访问ID。我在F#不会这样。它与不变性有关吗?有没有一种方法可以访问这些ID而不必再次调用DBSql server F#提交更改后获取ID(使用SQLDataConnection类型提供程序),sql-server,f#,ienumerable,type-providers,seq,Sql Server,F#,Ienumerable,Type Providers,Seq,我正在使用类型提供程序将数据插入SQL Server数据库。我想要我刚刚插入的条目的ID。在C#中,我可以在调用SubmitChanges()后从“foo”访问ID。我在F#不会这样。它与不变性有关吗?有没有一种方法可以访问这些ID而不必再次调用DB foo |> dbContext.MyTable.InsertAllOnSubmit dbContext.DataContext.SubmitChanges() //data in foo gets added, but Ids are a
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是seq。这似乎就是问题所在
在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是主键,标识列
编辑
我明白了,在本例中,您希望从数据中获取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;…]
你能展示适用于你的等效C#代码吗?这并不能回答问题,问题是如何观察新插入记录的id。@ildjarn你是对的,我误读了Q。OP希望id来自对象,而不是db。六羟甲基三聚氰胺六甲醚。。。。让我检查并删除/更新。