2015-07-13 43 views
0

我正在使用Breeze和我的Web API,並且希望在我的實體中添加一些審計。所以我想用BeforeSaveEntityDelegate但是當我實現它,它保存功能之後被炒魷魚...... 這裏是我的Breezecontroller:BeforeSaveEntity在保存後被解僱

[BreezeController] 
public class EssController : ApiController 
{ 
    private readonly ESSContextProvider _contextProvider; 

    public EssController(ESSContextProvider contextProvider) 
    { 
     _contextProvider = contextProvider; 
    } 
    protected bool BeforeSaveEntity(EntityInfo entityInfo) 
    { 
     // create audit record and add to your instance of your context 
     // this.Context.YourAuditEntity.Add(...) 
     if (entityInfo.EntityState == EntityState.Modified) 
     { 
      var auditable = (Entity)entityInfo.Entity; 
      auditable.UpdatedBy = "jja"; 
      auditable.UpdatedDate = DateTime.Now; 
     } 
     return true; 
    } 

    [HttpPost] 
    public SaveResult SaveChanges(JObject saveBundle) 
    { 
     _contextProvider.BeforeSaveEntityDelegate = BeforeSaveEntity; 
     return _contextProvider.SaveChanges(saveBundle); 
    } 

    [HttpGet] 
    public string Metadata() 
    { 
     return _contextProvider.Metadata(); 
    } 
} 

因此,首先他的SaveChanges執行,然後進入BeforeSaveEntity ...

回答

0

我認爲在調用序列中沒有錯誤。當您撥打_contextProvider.SaveChanges(saveBundle);時,ContextProvider的SaveChanges方法將調用BeforeSaveEntityDelegate(如果有),然後它將保留更改並調用AfterSaveEntities委託。

請看這裏ContextProvider的源代碼https://github.com/IdeaBlade/Breeze/blob/master/Breeze.ContextProvider/ContextProvider.cs。在類中尋找「OpenAndSave」方法。

請勿將您的ApiController SaveChanges與ContextProvider的SaveChanges混淆。