1

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

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

我以为我可以将电影实体添加到 SaveResult Entities 列表中,但随后: - 我需要从 saveBundle 参数中访问属性 - 我将不得不重新查询数据库,这就是我刚刚在 BeforeSaveEntity 中所做的

谢谢

尼古拉斯

4

2 回答 2

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
     };
}
于 2014-04-29T19:16:40.533 回答
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;
  }
于 2013-07-03T05:54:36.500 回答