我需要将未保存的实体从客户端发送到服务器,但不是为了保存更改,而是为了使用实体上的数据进行处理,然后更改它的一些值并将其传递回客户端。这是可能的吗?如果不是,我的选择是什么?我尝试导出实体,然后将其发送到webapi控制器上的一个方法,该方法获取一个JObject,但没有找到将其反序列化到服务器实体的方法
发布于 2014-01-18 14:59:02
我们确实遇到了类似的问题,并找到了如下解决方案:您需要考虑微风管理其对象的方式。
1.创建自定义saveBundle。考虑复杂的order,object.You需要用order中的每个嵌套对象填充您的保存包。Like: var saveBundle = new Array();
saveBundle.push(order.SaleAccountingInfo);
saveBundle.push(order.CostAccountingInfo);
saveBundle.push(order);2.创建自定义保存选项,可以指向您在服务器上的自定义保存方法,如: var so = new breeze.SaveOptions({ resourceName:"BookOrder“});
3.调用标准微风函数并传递创建的参数
manager.saveChanges(saveBundle,so).fail () { // manager.rejectChanges();TODO检查所需内容
deferred.resolve(true);
});在服务器上,你需要准备好你的自定义函数,并挂接一些微风委托
HttpPost公共SaveResult BookOrder(JObject orderBundle) {
context.BeforeSaveEntityDelegate = OrderBeforeSaveEntity;
context.BeforeSaveEntitiesDelegate = SaveOrder;
context.AfterSaveEntitiesDelegate = BookOrderAfterSave;
try
{
return context.SaveChanges(orderBundle);
}
catch (Exception)
{
throw;
}
}您可以在前两个委托中做很多事情,但这是您要寻找的最后一个委托
private void BookOrderAfterSave(Dictionary<Type, List<EntityInfo>> orderSaveMap, List<KeyMapping> orderKeyMappings)
{
var orderEntity = orderSaveMap.Where(c => c.Key == typeof(BL.Orders.Order)).Select(d => d.Value).SingleOrDefault();
BL.Orders.Order order = (BL.Orders.Order)orderEntity[0].Entity; //your entity
//logic here
}发布于 2014-01-16 20:55:06
我们在这里也在做类似的事情。它将保存实体,所以我不确定这是否符合您的问题。您可以执行以下操作:
entity.entityAspect.setModified()然后发出一个saveChange()
然后你就可以在服务器上进行计算了。在我们的例子中,我们使用的是breeze.webapi,所以我们在beforeSave(entity)方法中执行此操作。
breeze按照设计将更改后的实体发送回客户端,在客户端缓存会根据您在服务器上所做的更改进行更新。
https://stackoverflow.com/questions/21159591
复制相似问题