所以我有用户将文件上传到我的服务器进行处理。将内容读取到SQL表,将其称为ImportedData以用于所有意图和目的。然后用户操作它们,然后当他们想要提交数据进行处理时,数据被提交给上游系统(这里不重要),然后从所述表中删除数据。
然而,在某些情况下,用户可以进行导入,然后由于某种原因决定离开页面,关闭浏览器并回家当天,你有什么。影响是行将保留在ImportedData中。
现在我最初想的是只运行一个代理作业来删除超过一天的所有行;用户不太可能希望能够在早上处理数据。
然而,是否有“更好”的方式?
应用程序是使用MVC ASP.Net Razor前端,后端的所有C#,实体框架等构建的。我只是想知道我可以做些什么来从ImportedData中删除特定于该导入的数据(唯一的)该确切导入会话的GUID)所以当用户进行任何类型的非清理注销时,该导入的唯一数据会被删除吗?
答案 0 :(得分:0)
我建议不要直接删除行。您可以为存储过程安排作业,将旧数据加载到临时表中并保持该状态直到下次执行存储过程。
逻辑将是:
Create procedure Name
AS
BEGIN
(
IF EXISTS(SELECT * FROM SYS.TABLES WHERE NAME = N'...')
BEGIN
DROP TABLE ...
END
CREATE TABLE TABLE_NAME
...
INSERT INTO TABLE_NAME
SELECT ..
FROM YOUR_TABLE
)
END
只要确保数据保持不变,就会发生一些不情愿的事情。
答案 1 :(得分:0)
这是你可能做的一件事:你可以在有问题的页面上添加一些javascript,它会定期,合理的间隔 - 也许每隔几分钟 - 对服务器进行一次ajax调用 - 这只会指示用户浏览器仍在查看该记录的服务器。您可以在相应的数据库记录上更新某种LastClientHeartbeat时间戳,以指示它仍在被查看。然后,在您定期安排的清理作业中,您可以对其进行编程以跳过删除LastClientHeartbeat时间戳相对较新的文件(在最后几分钟内),因为这表示用户仍然在浏览器中打开该页面。
这不是一个非常复杂的解决方案,但它实现起来非常简单,并且它(大部分)会阻止您意外删除用户只是花时间完成工作的文件。