2010-11-23 4 views
2

データベースの "isDeleted"カラムを使用してソフト削除を可能にするマッピングレベルでフィルタリングされたコレクションがあります。私はコレクションが自動的に私はエンティティをリロードするまで削除を反映するために更新されないいくつかの項目についてisDeletedプロパティを設定するとマッピングでフィルタリングされたコレクションをリフレッシュする

HasMany(x => x.UploadedFiles).Where("IsDeleted = 0") 

マッピングは次のようになります。

エンティティを再読み込みせずに「リフィル」を強制する方法はありますか?

答えて

2

マッピングのWhere句は、フェッチ中にフィルタリングすることです。実行時には使用されません。そのため、IsDeleted = trueに設定すると、アップロードされたファイルがコレクションから削除されることはありません。私はそれを所有するエンティティをリロードせずにコレクションをリフレッシュすることは可能だとは思わない。

あなたのオブジェクトモデルにあなたの意図を表現することをお勧めします。

private IList<File> uploadedFiles = new List<File(); 
public virtual IEnumerable<File> UploadedFiles { 
    get { 
     return uploadedFiles.Where(x => x.IsDeleted == false); 
    } 
} 

そしてあなたのバッキングフィールドにアクセスするには、あなたのマッピングを修正する...オブジェクトモデルの

HasMany(x => x.UploadedFiles) 
    .Access.CamelCaseField() 
    .Where("IsDeleted = 0") 
+0

「UploadedFiles」プロパティはNHibernateはの仮想GET-セットです。 別のプロパティを追加することを意味しますか?(例:NonDeletedUploadedFilesは、仮想プロパティにフィルタをかけるかどうかを指定します) – Variant

+1

UploadedFilesがオブジェクトのコレクションであると仮定しました。 UploadedFilesプロパティは、LINQ-to-Objectsを使用して、削除されたものをフィルタリングします。 –

関連する問題