2011-08-13 7 views
3

EF4.1を使用すると、削除されたときに呼び出される自分のPOCOでオーバーライドできる機能のイベントがありますか?ファイルへの参照を含むDBを使用してファイルシステムにイメージを保存します。 DBから削除すると、一致するファイルも削除します。OnDeleteまたファイルを削除

+0

を次のように単一のトランザクションで更新を削除し、データベースファイルをラップすることができ、私はあなたが使っているどのデータベースシステムを知っているが、SQL Server 2008の始まるしていない、あなたは可能性がありますvarbinary(max)FILESTREAMカラムを使用したい場合は、データベース内ではなくファイルシステム内に透過的にファイルを格納します。手動でファイルの削除を管理する必要はありません。 –

+0

@Julienはい私はSQL 2008 rc2を使用しています。しかし私のホスティングプロバイダはSQL空間の占有量を変えますが、通常のディスク容量は非常に安いので、DBサイズを最小限に抑えるよう努めています。 – 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は私のDBにアクセスする唯一の場所です。私はロジックを置くのが好きではなく、ファイルシステムの呼び出しをDBに入れます。 EFはそれを全く行うことができますか? – Daveo

関連する問題