2016-07-22 6 views
1

Я использую поставщика типов для вставки данных в базу данных SQL Server. Мне нужны идентификаторы только что вставленных записей. В C# я мог получить доступ к идентификаторам из «foo» после вызова функции SubmitChanges(). Это не происходит для меня в F #. Это имеет какое-то отношение к неизменности? Есть ли способ получить доступ к этим идентификаторам без необходимости повторного вызова в БД?F # получение идентификатора после SubmitChanges (с использованием поставщика типа 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. Это, похоже, проблема.

Выполнение |> Seq.toList на foo до того, как InsertAllOnSubmit сделал трюк, и теперь я могу видеть идентификаторы.

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

дает мне это:

DB Table

Где номер приходит от х, и идентификатор первичного ключа, идентичность столбца.

EDIT

Я вижу, вы хотите получить идентификатор из data в этом случае. Тогда принудительное перечисление (или сохранение данных в массиве/списке) является единственным способом, который я знаю. В 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 } 

вал это: сл = сл [10001L; 10002L; 10003L; 10004L; ...]

+0

Это не отвечает на вопрос, который спрашивает, как наблюдать идентификаторы вновь вставленных записей , – ildjarn

+0

@ildjarn, вы правы, я неправильно читаю Q. OP хочет идентификатор от объекта, а не db. Хммм .... позвольте мне проверить и удалить/обновить. – s952163