保存包的 Breezejs 问题

breezejs issues with the save bundle

本文关键字:问题 Breezejs 保存      更新时间:2023-09-26

im 使用 breezejs,我的应用程序的服务器端代码是 .net。

在我的视图(客户端)中,我想添加和实体,然后我想保存它。让我们假设一个实体是这样的:

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

我想设置CreatedDate UpdatedDate CreatedByUpdatedBy的值,我当然可以使用JavaScript来做到这一点,但我不希望客户端处理这些事情。

我的微风控制器所在的函数是这样的:

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

如您所见,saveBundle 是一个 JObject,当我调试时,我看到这样的 saveBundle

{
"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": {}
}

如何在提交保存之前更改 saveBundle 中 CreatedDate UpdatedDate CreatedByUpdatedBy 的值???

这是一个带有对象数组的 JObject,我可以用 JavaScript 操作 Json,我如何使用 .Net ???

多谢。

感谢Jay Traband的帖子,我终于找到了一种在保存实体之前对其进行更改的方法。

我像这样重载BeforeSaveEntity

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;
                string username = Membership.GetUser().UserName;
                MyModel.CreatedBy = username;
                MyModel.UpdatedBy = username;
            }
        }
        return true;
   }

非常感谢,我希望有一天这会帮助某人。

您可以使用 ContextProvider 的虚拟 BeforeSaveEntity 和 BeforeSaveEntities 方法来拦截 Breeze 的服务器端保存过程。 此处和此处的文档包含有关此主题的详细信息。

例如,您可以使用如下所示的代码重写 BeforeSaveEntities

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