2013-05-17 79 views
0

我有一個文件存儲庫庫,它處理將文件保存到服務器上。隨着保存物理文件,數據庫條目也被記錄在處理實體框架SaveChanges()異常進行清理

下面是插入方法。

public DataFile InsertFile(string fileName, byte[] fileBytes) 
{ 
    File.WriteAllBytes(Path.Combine(FileRepPath, fileName), fileBytes); 

    DataFile dataFile = NewDataFile(
     fileName, 
     fileBytes.Length 
    ); 

    try 
    { 
     using (MyEntities context = new MyEntities()) 
     { 
      context.DataFiles.Add(dataFile); 
      context.SaveChanges(); 
     } 
    } 
    catch (Exception) 
    { 
     File.Delete(Path.Combine(FileRepPath, fileName)); 
     throw; 
    } 

    return dataFile; 
} 

如果數據庫更新失敗,那麼我想從服務器上刪除文件。我通過捕獲上下文操作中發生的任何異常並刪除文件(並重新拋出錯誤以使其可能冒泡)來做到這一點。

這是正確的做法嗎?我應該捕捉更具體的例外嗎?

+0

這個問題問如何捕捉到所有的實體框架例外。 http://forums.asp.net/t/1829033.aspx/1 –

+0

請注意,如果發生系統故障,您可能仍會以磁盤上的文件結束,但在數據庫中沒有記錄。 – Marwijn

+0

如果發生併發異常或唯一約束衝突,其他人可能在當前用戶之前添加了'DataFile',因此您不想從磁盤刪除該文件。 –

回答