problèmes breezejs avec le paquet de sauvegarde

Je travaille avec breezejs et le code côté serveur de mon application est .net.

dans mes vues (côté client), je veux append et entité alors je veux l’enregistrer. Supposons qu’une entité est comme ceci:

{ "Id": 1, "Name": "someName", "CreatedDate": "1900-01-01T05:00:00Z", "UpdatedDate": "1900-01-01T05:00:00Z", "CreatedBy": null, "UpdatedBy": null, "RowVersion": 0, etc ... } } 

Je veux définir les valeurs de CreatedDate UpdatedDate CreatedBy et UpdatedBy , je peux le faire en utilisant javascript bien sûr, MAIS je ne veux pas que le client prenne soin de ce genre de choses.

mon contrôleur de brise où habite cette fonction est comme ceci:

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

comme vous pouvez le voir, le saveBundle est un JObject, quand je débogue, je vois le saveBundle comme ceci:

 { "entities": [ { "Id": 1, "Name": "someName", "CreatedDate": "1900-01-01T05:00:00Z", "UpdatedDate": "1900-01-01T05:00:00Z", "CreatedBy": null, "UpdatedBy": null, "RowVersion": 0, etc ... } } } ], "saveOptions": {} } 

Comment puis-je changer les valeurs de CreatedDate UpdatedDate CreatedBy et UpdatedBy dans le saveBundle avant que la sauvegarde soit validée ???

c’est un JObject avec un tableau d’objects comme propriété, je peux manipuler Json avec javascript, comment puis-je le faire avec .Net ???

Merci beaucoup.

Grâce à Jay Traband, j’ai enfin trouvé le moyen de modifier une entité avant de l’enregistrer.

J’ai surchargé le BeforeSaveEntity comme ceci:

 protected override bool BeforeSaveEntity(EntityInfo entityInfo) { // Return false if don´t want to save the entity var entityType = entityInfo.Entity.GetType(); if (entityInfo.Entity.GetType() == typeof(MyEntityTypeModel)) { if (entityInfo.EntityState == EntityState.Added) // It can be 'Modified' or 'Deleted' { var MyModel = entityInfo.Entity as MyEntityTypeModel; MyModel.CreatedDate = DateTime.Now; MyModel.UpdatedDate = DateTime.Now; ssortingng username = Membership.GetUser().UserName; MyModel.CreatedBy = username; MyModel.UpdatedBy = username; } } return true; } 

Merci beaucoup, et j’espère que cela aidera quelqu’un un jour.

Vous pouvez intercepter le processus de sauvegarde côté serveur de Breeze à l’aide des méthodes virtuelles BeforeSaveEntity et BeforeSaveEntities de ContextProvider . La documentation ici et ici contient plus d’informations sur ce sujet.

Par exemple, vous pouvez remplacer BeforeSaveEntities avec du code du type suivant.

 protected override Dictionary> BeforeSaveEntities(Dictionary> saveMap) { foreach (var type in saveMap.Keys) { var list = saveMap[type]; foreach (var entityInfo in list) { var entity = entityInfo.Entity; // .. do something interesting here } }