2016-07-22 53 views
1

我正在使用類型提供程序將數據插入SQL Server數據庫。我想要我插入的條目的ID。在C#中,我可以在調用SubmitChanges()之後從「foo」訪問ID。這在F#中不會發生。它是否與不變性有關?有沒有辦法訪問這些ID而無需再次調用數據庫?F#在SubmitChanges之後獲取ID(使用SQLDataConnection類型提供程序)

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

你能展示相當於C#的代碼嗎? –

+0

[這裏只是一個插入鏈接](http://stackoverflow.com/a/113948/4126319) –

回答

1

對不起,我沒有指出foo是一個seq。這似乎是問題。

在InsertAllOnSubmit之前執行foo上的Seq.toList操作,我現在可以看到ID。

0

您確定嗎?我不知道富有什麼,但插入序列應該工作。例如:

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() 

給了我這樣的:

DB Table

其中number是從X來了,ID是主鍵,標識列。

編輯

我明白了,你想從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它:SEQ = SEQ [10001L; 10002L; 10003L; 10004L; ...]

+0

這不回答問題,它詢問如何觀察新插入的記錄的ID 。 – ildjarn

+0

@ildjarn你說得對,我誤解了Q.OP希望來自對象的id不是db。嗯....讓我檢查並刪除/更新。 – s952163

相關問題