3

我正在使用breathjs,我的应用程序的服务器端代码是.net。

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

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

我想设置 and 的值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 CreatedBy和中的值???UpdatedBy

这是一个以对象数组为属性的 JObject,我可以使用 javascript 操作 Json,我如何使用 .Net 来操作?

非常感谢。

4

2 回答 2

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

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

于 2013-10-08T03:33:53.383 回答
3

您可以使用ContextProvider 的虚拟BeforeSaveEntityBeforeSaveEntities方法拦截 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
      }
 }
于 2013-10-07T18:15:12.277 回答