2014-01-16 23 views
0

我需要將我的未保存的實體從客戶端發送到服務器,但不是用於保存更改 但爲了使用實體上的數據執行一個進程,然後更改它的一些值並將其傳回客戶端 可能? 如果不是我的選擇是什麼? 我試圖導出實體,然後將其發送到webapi控制器上的方法,該方法獲取JObject但未找到將其反序列化到服務器實體的方法如何在服務器上獲取未保存的實體但不保存?

回答

0

我們在此處做類似的事情。它會保存實體,所以我不確定這是否適合您的問題。 你可以這樣做:

entity.entityAspect.setModified() 

然後發出saveChange()

那麼你可以做服務器上的計算。 在我們的例子中,我們使用breeze.webapi,所以我們在beforeSave(entity)方法中這樣做。

微風格按設計發送更改後的實體,然後返回到客戶端,在客戶端更新緩存,並在服務器上完成更改。

1

我們確實有類似的問題,並找到如下解決方案: 您需要考慮微風管理它的對象的方式。

1.創建自定義saveBundle。 考慮複雜的訂單對象。您需要在每個嵌套對象的順序內填充保存包。 Like: var saveBundle = new Array();

saveBundle.push(order.SaleAccountingInfo); 
    saveBundle.push(order.CostAccountingInfo); 
    saveBundle.push(order); 

2.創建自定義的保存選項,在這裏你可以指向您的自定義保存方法對服務器 像: VAR所以=新breeze.SaveOptions({資源名稱: 「BookOrder」});

3.Call標準微風函數,並將它傳遞創建PARAMS

manager.saveChanges(saveBundle,所以).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 
} 

希望它指向正確的方向上的最後一個。

相關問題