2015-07-13 5 views
0

Я использую Бриз с помощью моего веб-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);, метод SaveChanges ContextProvider вызовет метод BeforeSaveEntityDelegate, если он есть, то он сохранит изменения и вызовет делегат AfterSaveEntities.

Взгляните на исходный код ContextProvider здесь https://github.com/IdeaBlade/Breeze/blob/master/Breeze.ContextProvider/ContextProvider.cs. Ищите метод OpenAndSave внутри класса.

Не смущайте свои настройки SaveChanges для ApiController с помощью SaveChanges ContextProvider's SaveChanges.

Смежные вопросы