假设我有一个电影实体,平均分数。用户可以为电影评分,为此我在客户端上调用datacontext.savechanges,将Rating对象发送到服务器。在服务器上,调用SaveChanges方法,在BeforeSaveEntity方法中,我调整电影的平均分数。
以下是问题:如何从服务器的SaveChanges方法返回平均得分,例如在SaveResult对象中?
我以为我可以将电影实体添加到SaveResult实体列表中,但随后: - 我需要从saveBundle参数中访问属性 - 我将不得不重新查询DB,我刚才在BeforeSaveEntity中做了
由于
尼古拉斯
答案 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
};
}