Я использую LINQ для вставки записей в базу данных. Я создаю эти записи и отслеживаю их с помощью списка. Исходя из некоторой логики, я удаляю некоторые записи, удаляя их из Списка. (Я использую тот же объект DataContext).
Когда я хочу вставить записи в базу данных, я выполняю InsertOnSubmit () соответствующей таблицы linq, а затем SubmitChanges () для объекта datacontext. LINQ также вставляет записи, удаленные из списка, вместе с теми, которые присутствуют в списке.
пример:
//list to keep track of records to insert
List list
// add the records to list
list.add(some records)
//deleted last 2 records
list.remove()
//call InsertAllOnSubmit on the linq table passing the list object with records to insert
linqTable.InsertAllOnSubmit(list)
//call SubmitChanges on datacontext object
datacontext.SubmitChanges()
Я наткнулся на эту статью msdn Состояния объектов и отслеживание изменений (LINQ to SQL) < / а>
Вы можете явно запросить вставки с помощью InsertOnSubmit. В качестве альтернативы LINQ to SQL может определять вставки, находя объекты, связанные с одним из известных объектов, которые необходимо обновить. Например, если вы добавляете объект Untracked в EntitySet (TEntity) или устанавливаете EntityRef (TEntity) на объект Untracked, вы делаете объект Untracked доступным посредством отслеживаемых объектов на графике. При обработке SubmitChanges LINQ to SQL просматривает отслеживаемые объекты и обнаруживает все достижимые постоянные объекты, которые не отслеживаются. Такие объекты являются кандидатами для вставки в базу данных.
Думаю, вопрос сводится к следующему - как изменить состояние удаленных объектов на «Не отслеживается»?
Я попробовал DeleteOnSubmit после удаления объектов из списка, но это дает исключение (невозможно удалить объект, который не был прикреплен).
Может кто-нибудь указать мне решение? Спасибо.
Я хотел бы знать, могу ли я добиться этого, используя только LINQ. (Я знаю, что могу использовать сохраненную процедуру и вставлять только записи в списке.)