breezejs问题与保存包

时间:2013-10-07 11:03:07

标签: c# javascript .net json breeze

我正在使用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,有一个对象数组作为proprety,我可以用javascript操纵Json,我怎么能用.Net ???

非常感谢。

2 个答案:

答案 0 :(得分:5)

感谢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;
   }

非常感谢,我希望有一天能帮到某人。

答案 1 :(得分:3)

您可以使用 ContextProvider的虚拟 BeforeSaveEntity BeforeSaveEntities 方法拦截Breeze的服务器端保存过程。文档herehere提供了有关此主题的更多信息。

例如,您可以使用以下代码覆盖 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
      }
 }