我正在开发一个MVC 4项目,该项目要求我将数据从活动表移动到表中以存档内容。
我理解使用Entity Framework,表格与模型紧密相关。我创建了两个模型 - 一个用于活动记录,一个用于存档记录。
在活动表中添加所有数据以存档并删除活动表中的所有内容以供新用途的最佳方法是什么?
P.S:我对这里的容错有点偏执,因为我可能一次处理大约30000条记录。我需要成功地将所有记录移动到存档,并确保仅在成功复制后才删除它们。
答案 0 :(得分:2)
即使您使用的是Entity Framework,仍然可以使用Store Procedures。这是使用存储过程的好例子,因为您可以在sproc(快速)中执行基于集合的操作,而不是遍历代码中的所有记录(慢)。
以下是有关如何将细分添加到EF的一些步骤(您也可以只使用Google):Adding stored procedures complex types in Entity Framework
你的sproc可能看起来像:
SET IDENTITY_INSERT ON dbo.ArchiveTable --Assuming you have an identity column
INSERT INTO dbo.ArchiveTable(
Col1
,Col2
)
SELECT
Col1
,Col2
FROM dbo.MainTable
SET IDENTITY_INSERT OFF dbo.ArchiveTable --Assuming you have an identity column
DELETE * FROM dbo.MainTable
在事务中包装(以满足您的容错),这应该是30,000多条记录的快速执行。我建议你返回一些类似于受影响的记录数或类似的东西,所有这些都应该能够从存储过程中返回。
答案 1 :(得分:0)
除非必须,否则不要在代码中执行 - wilsjd的答案是正确的 - 创建一个直接从EF调用的事务存储过程。
但是如果你有理由在代码中执行它 - 比如因为你没有很好的方法从存储过程中访问这两个表,那么一定要理解并从内部对事务做正确的事情你的代码。这是一个很好的答案,讨论这个: Entity Framework - Using Transactions or SaveChanges(false) and AcceptAllChanges()