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