-1

モデルクラスを作成し、ロガーフィールドCreatedOnとを追加しましModifiedOnた。そして、同じモデルのCrudクラスを作成しました。フォーム入力を提出せずにこのロガーを処理し、dbテーブルに自動的に追加したいと思います。どうすればこれを達成できますか?

4

2 に答える 2

2

それはあなたの好み/永続性モデルに依存します。

コンストラクターにCreatedOnプロパティを設定し、保存するたびにModifiedOnプロパティを設定できます。

Entity Frameworkを使用している場合は、DataContextのSaveChanges()メソッドにフックして、そこにCreatedOnプロパティとModifiedOnプロパティを設定できます。プロパティが(IAuditable)のような基本クラス/インターフェイスの一部であることを確認してください。そうすれば、次のようなことができます。

public class YourContext : DbContext
{
    public override int SaveChanges()
    {
       ChangeTracker.DetectChanges();

        ObjectContext ctx = ((IObjectContextAdapter)this).ObjectContext;

        List<ObjectStateEntry> objectStateEntryList =
            ctx.ObjectStateManager.GetObjectStateEntries(EntityState.Added
                                                       | EntityState.Modified
                                                       | EntityState.Deleted)
            .ToList();

        foreach (ObjectStateEntry entry in objectStateEntryList)
        {
            var auditObject = entry.Entity as IAuditable;
            if(auditObject.CreatedOn != DateTime.MinValue)
            {
                auditObject.CreatedOn = DateTime.Now;
            }

            auditObject.ModifiedOn = DateTime.Now;
        }

        return base.SaveChanges();
    }
}
于 2012-07-11T10:23:35.417 に答える
1

申し訳ありませんが、正確に何を意味するのかわかりません。アクション後、コントローラーにこれらのロガーフィールドを入力するだけではありませんか?

(誤解されている場合は申し訳ありません)

于 2012-07-11T10:07:20.103 に答える