0

ある予約で変更が発生した場合は、関係者全員に変更に関するメールを受け取ってもらいたいと思います。

実際、これを行う方法がわかりません。しかし、私は私の最初の質問はそうあるべきだと思います。変更が一致しているかどうかを確認するにはどうすればよいですか?また、変更に関与している人をどのように知ることができますか?

MVC 3でEntityFramework(遅延読み込み)を使用しています。

4

1 に答える 1

1

デルトゥ、

これはいくつかの方法で解決できます。私が今日使用しているのは、リポジトリが変更を保存しているときにイベントを発生させることに基づいています。構成がどのように見えるかはわかりませんが、これが私が行うことの抜粋です。

public void SaveChanges()
{
    //_auditDate = DateTime.Now; ignore this in your case
    OnSavingChanges();
    _context.SaveChanges();
    OnSavedChanges();
}

private void OnSavingChanges()
{
    if (SavingChanges != null)
    {
        var eventArgs = new RepositorySavingChangesEventArgs()
        {
            AuditDate = _auditDate
        };
        SavingChanges(this, eventArgs);
    }
}
public event EventHandler<RepositorySavingChangesEventArgs> SavingChanges;

private void OnSavedChanges()
{
    if (SavedChanges != null)
    {
        var eventArgs = new RepositorySavedChangesEventArgs()
        {
            AuditDate = _auditDate
        };
        SavedChanges(this, eventArgs);
    }
}
public event EventHandler<RepositorySavedChangesEventArgs> SavedChanges;

次に、クライアントコードがSavingChangesEventHandlerにサブスクライブしていることを確認します。仕事は終わりました。文字通り、重要な変更が存在することがわかっているコンテキスト内でのみサブスクライブし、そのイベントハンドラーを介して電子メールサービス呼び出しを開始します。

お役に立てれば。

[編集]以下のコメントに応じて、これらのイベントのいずれかをサービスクラス、基本抽象クラス、またはより単純にコントローラーで発生させます。これは、イベントを発生させるコントローラーの例です。

public TimelinesController(IRepository repository)
{
_serviceTasks = new TimelineService(repository);
    repository.SavedChanges +=
        new EventHandler<RepositorySavedChangesEventArgs>(repository_SavedChanges);
}

private void repository_SavedChanges(object sender, RepositorySavedChangesEventArgs e)
{
    var newDate = e.AuditDate;
    /* do something fancy with the audit date */
}

これがあなたをより「とがった」方向に向けることを願っています:)

于 2012-05-23T08:55:36.707 に答える