wog*_*les 13 c# entity-framework file
我有一个表引用我们网络上共享位置的文件(将文件路径存储在数据库中).
我有一个按钮需要删除数据库中的记录和文件系统中的文件:
foreach (var report in reports)
{
string filePath = report.ReportPath;
if (File.Exists(filePath));
{
File.Delete(filePath);
}
context.ReportGenerations.DeleteObject(report);
context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
删除文件或删除数据库记录时可能会抛出异常,如果发生这种情况,我希望这两个操作都不会完成.
有没有一种简单的方法可以确保两个操作都成功完成?
Cla*_*edi 21
你必须做两件事
将整个过程包装在数据库事务中.
在从文件系统执行之前从数据库中删除文件
如果进程无法从数据库中删除,则不会删除物理文件,因为您尚未访问文件系统删除逻辑.
如果进程无法从文件系统中删除,则会回滚事务并恢复数据库操作.
DbTransaction transaction = null;
foreach (var report in reports)
{
try
{
transaction = context.Connection.BeginTransaction();
context.ReportGenerations.DeleteObject(report);
context.SaveChanges();
string filePath = report.ReportPath;
if (File.Exists(filePath));
{
File.Delete(filePath);
}
transaction.Commit();
}
catch
{
transaction.Rollback();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2885 次 |
| 最近记录: |