我正在使用 LINQ 在数据库中插入记录。我创建这些记录并使用列表跟踪它们。基于一些逻辑,我通过从列表中删除来删除一些记录。(我正在使用相同的 DataContext 对象)。
当我想在数据库中插入记录时,我在 datacontext 对象上执行相应的 linq 表的 InsertOnSubmit(),然后是 SubmitChanges()。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 文章Object States and Change-Tracking (LINQ to SQL)
您可以使用 InsertOnSubmit 显式请求插入。或者,LINQ to SQL 可以通过查找连接到必须更新的已知对象之一的对象来推断插入。例如,如果将 Untracked 对象添加到 EntitySet(TEntity) 或将 EntityRef(TEntity) 设置为 Untracked 对象,则可以通过图中的跟踪对象访问 Untracked 对象。在处理 SubmitChanges 时,LINQ to SQL 会遍历跟踪的对象并发现任何未跟踪的可访问持久对象。这些对象是插入数据库的候选对象。
我想问题可以归结为——如何将已删除对象的状态更改为“未跟踪”?
从列表中删除对象后,我尝试了 DeleteOnSubmit,但这给出了异常(无法删除尚未附加的实体)。
有人可以指出我的解决方案吗?谢谢。
我想知道我是否可以仅使用 LINQ 来实现这一点。(我知道我可以使用存储过程并仅在列表中插入记录。)