Breezejs SaveChanges:有可能以某种方式返回自定义的SaveResult对象吗?

时间:2013-07-02 11:20:52

标签: breeze

假设我有一个电影实体,平均分数。用户可以为电影评分,为此我在客户端上调用datacontext.savechanges,将Rating对象发送到服务器。在服务器上,调用SaveChanges方法,在BeforeSaveEntity方法中,我调整电影的平均分数。

以下是问题:如何从服务器的SaveChanges方法返回平均得分,例如在SaveResult对象中?

我以为我可以将电影实体添加到SaveResult实体列表中,但随后: - 我需要从saveBundle参数中访问属性 - 我将不得不重新查询DB,我刚才在BeforeSaveEntity中做了

由于

尼古拉斯

2 个答案:

答案 0 :(得分:1)

正如pawel在评论中指出的:要在SaveChanges承诺中返回影片,请在自定义EFContextProvider上的BeforeSaveEntities方法中更新影片,并将其添加到saveMap。

我为你准备了一些代码。

protected override Dictionary<Type, List<EntityInfo>> BeforeSaveEntities(Dictionary<Type,   List<EntityInfo>> saveMap) {
    Movie movie = null;
    // initialize the movie variable and update the movie as needed
    saveMap.Add(typeof(Movie), movie);

    return saveMap;
  }

答案 1 :(得分:1)

是的,这是可能的。

像通常那样在EDMX上编写控制器。对我们来说,它转化为这样的东西:

public class PersonalizationController : MultiTenantBreezeController<PersonalizationEntities>

其中PersonalizationEntities是ObjectContext。

然后在服务器上,我们只是定义了SaveChanges(不介意覆盖,我们有一个基类)

[HttpPost]
public override SaveResult SaveChanges(JObject saveBundle)
{
     // Deserialize the object that needs to get saved (ApplicationDefaults is my DTO)
     var applicationDefaultsList = JsonConvert.DeserializeObject<List<ApplicationDefaults>>(saveBundle.SelectToken("entities").ToString());

     // Do whatever logic you need to save the data
     using (var repo = ServiceLocator.Current.Container.Resolve<IUserPreferenceRepository>())
     {
          // Your save logic here
     }

     // Construct the save result to inform the client that the server has completed the save operation
     var keyMappings = new List<KeyMapping>();
     return new SaveResult()
     {
         Entities = applicationDefaultsList.Cast<object>().ToList(),
         Errors = null,
         KeyMappings = keyMappings
     };
}