2012-05-08 26 views
3

私はRelationshipManagerを使用して関連するデータを持つエントリにアクセスする方法について、いくつかの記事を読んできました。関連するデータが追加または更新されたエンティティを監査する最良の方法は何か、私にはまだ不明です。Entity Frameworkの多対多リレーションシップの監査?

サンプルクラス:

public class Rfi 
{ 
    public Guid Id {get;set;} 
    public string Number {get;set;} 
    public virtual ICollection<Attachment> Attachments {get;set;} 
} 

public Class Attachment 
{ 
    public Guid Id {get;set;} 
    public string Name {get;set;} 
    public string Description {get;set;} 
    public string FileName {get;set;} 
    public string Path {get;set;}   
} 

サンプルマッピング:

public class RfiMapping: EntityTypeConfiguration<Rfi> 
{ 
    public Rfimapping() 
    { 
     HasMany(r => r.Attachments).WithMany().Map(m => 
                  { 
                   m.MapLeftKey("RfiId"); 
                   m.MapRightKey("AttachmentId"); 
                   m.ToTable("Rfi_Attachments"); 
                  }); 
    } 
} 

私は仕事のパターンのリポジトリとユニットを使用しています。私のUoWはDbContextから継承します。リポジトリの呼び出しは次のようになります。

public void AddAttachmentToRfi(Attachment attachment, Guid rfiId) 
{ 
    var rfi = _rfiRepository.FindById(rfiId); 
    rfi.Attachments.Add(attachment); 
    _rfiRepository.UnitOfWork.Commit(); 
} 

それが添付ファイルの実体は、RFIエンティティに追加されたことを把握するために、オーバーライドされたSaveChangesメソッドでは、可能ですか? ChangeTracker.Entriesと言って、私がその状態を変更するように設定されているのを見ていません。どちらが理にかなっているのは、私は関係に直接的に加えて、エンティティを直接的に追加するものではないからです。

私はDbContextをIObjectContextAdapterにキャストすることを知っていますが、リレーションシップに加えられた変更を取得するためにRelationshipManagerで何を行う必要があるのか​​分かりません。また、関連するデータにどのような変更が加えられたかをまだ知ることができれば、添付ファイルのDescriptionプロパティを後で更新するかどうか不思議です。

この目標は、Rfiのユーザーインターフェイスでファイルを添付できるようにすることです(Rfiは添付ファイルを持つことができる唯一のエンティティではありません)。私はRfiに起こるすべての歴史を示す必要があります。つまり、添付ファイルが追加された場合、その添付ファイルを監査する必要があります。添付ファイルのデータが更新されている場合は、その変更を監査し、Rfiインターフェイス経由で更新されたことを示す必要があります。その添付ファイルが別のエンティティと共有されている場合、これは複雑になる可能性がありますが、後でその道を渡ります。

+0

これについてのご意見はありますか? – DDiVita

+0

こんにちは@DDiVita、あなたはすべてこれに答えを出しましたか?私はEF 6コードの最初のデータベースでトリガベース監査を実装しており、多対多テーブルの「リンク」を監査しようとしているときに同じ問題があります。 – FryHard

答えて

1

あなたは、エンティティのどれもそれらの間の関係だけを変更していないと言います。

EFはこれをRfi_Attachmentsテーブルへの挿入または削除します。

これを監査する1つの方法は、エントリが追加または削除されるたびにログテーブルにエントリを書き込むデータベーストリガを追加することです。

関連する問題