2011-08-13 54 views
3

使用EF4.1是否有一個函數的事件,我可以覆蓋我的POCO,它將被調用時它被刪除?我使用包含文件引用的數據庫將文件保存在文件系統上。當我從數據庫中刪除時,我也想刪除匹配的文件。OnDelete也刪除文件

+0

我不知道你使用的數據庫系統,但與SQL Server 2008開始,您可以想要使用varbinary(max)FILESTREAM列,它將文件透明地存儲在文件系統內而不是數據庫內。您不必通過使用它手動管理文件刪除。 –

+0

@Julien是的,我使用SQL 2008 rc2,我也是我的首選解決方案。然而,我的託管服務提供商改變了SQL空間的財富,但常規磁盤空間非常便宜,所以我試圖將數據庫大小降至最低。 – Daveo

回答

1

您可以覆蓋您的DbContextSaveChanges方法。

public override int SaveChanges() 
{ 
    var deletedEntities = ChangeTracker.Entries().Where(entry => entry.State == EntityState.Deleted); 

    foreach (var deletedEntity in deletedEntities) 
    { 
     if (deletedEntity .Entity is MyEntity) 
     { 
      //delete the file 
     } 
    } 

    return base.SaveChanges(); 
} 

你可以用文件中的單個事務刪除和數據庫更新如下

using (var scope = new TransactionScope()) 
{ 
    //your deletion logic 

    myContext.SaveChanges(); 

    scope.Complete(); 
} 
0

嘗試在數據庫級別觸發器中執行此操作。 EF不是處理這個問題的適當地方。

+0

EF是唯一一個將訪問我的數據庫的地方。我不喜歡把邏輯,文件系統調用放在數據庫中。英孚能夠做到這一點嗎? – Daveo