實體框架7 SaveChanges


有沒有辦法註冊一個在EF7中的模型保存到數據庫之前調用的回調?我想要做的是設置我在所有模型上的ModifiedBy和ModifiedDate屬性。我並不熱衷於在每次保存之前手動執行此操作,因此我正在尋找更通用和自動的方式。

一般承認的答案

ChangeTracker.Entries()允許您獲取所有實體更改。您可以在DbContext中覆蓋SaveChanges ,並使用類似下面的代碼設置修改後的屬性。

public override int SaveChanges()
{
    SetModifiedInformation();
    return base.SaveChanges();
}

public override async Task<int> SaveChangesAsync( CancellationToken cancellationToken = new CancellationToken() )
{
    SetModifiedInformation();
    return await base.SaveChangesAsync( cancellationToken );
}

private void SetModifiedInformation()
{
    foreach (var entityEntry in ChangeTracker.Entries())
    {
        var entity = entityEntry.Entity as ChangeTracking;
        if (entity != null)
        {
            entity.ModifiedBy = "Get User Here";
            entity.ModifiedTime = DateTime.Now;
        }
    }
}




許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因