2012-12-11 63 views
0

可以編輯服務器端嗎?WCF RIA編輯服務器端(DomainServiceClass)

我有一個表格,其中的值由編程構成,值始終都在變化,所以我想'更新'重新計算表格的值並提交更改。我不需要將任何數據傳回給客戶端。

在更改相關記錄後,我嘗試了ObjectContext.SaveChanges()方法在我的DomainServiceClass中,但它沒有調用數據庫值。

我錯過了什麼?可能嗎?

服務器端,DomainServiceClass方法:

public IQueryable<POINT> UpdateDB() 
{ 
    var Points = ObjectContext.POINTS.Include("Readings").Include("Items").Include("LatestStatus"); 
    List<POINT> itemsChanged = new List<POINT>(); 

     foreach (Point point in Points) 
     { 
      int status = CalculateStatus(point) 
      if (point.LatestStatus.FirstOrDefault().Status != status) 
       point.LatestStatus.FirstOrDefault().Status = new status 
     } 

     ObjectContext.SaveChanges(); 


     /*try 
     { 
      // Try to save changes, which may cause a conflict. 
      int num = ObjectContext.SaveChanges(); 
      Console.WriteLine("No conflicts. " + 
       num.ToString() + " updates saved."); 
     } 
     catch (OptimisticConcurrencyException) 
     { 
      // Resolve the concurrency conflict by refreshing the 
      // object context before re-saving changes. 
      ObjectContext.Refresh(RefreshMode.ClientWins, inspectionPoints); 

      // Save changes. 
      ObjectContext.SaveChanges(); 
      Console.WriteLine("OptimisticConcurrencyException " 
      + "handled and changes saved"); 
     }*/ 

     return itemsChanged.AsQueryable(); 
} 
+0

你有寫的權限?爲什麼是這樣的:'set point.LatestStatus.FirstOrDefault()。Status = new status' in pseudo code? –

+0

啊謝謝,'集合'是一個疏忽,刪除。我需要寫數據庫的權限嗎? – xhedgepigx

回答

0

當你試圖做出改變是不是你需要標記與調用屬性的方法,傳統的CRUD操作。同時更新到你的POINT對象需要使用ObjectContext,否則你只是改變你的內存集合。

[Invoke] 
public IQueryable<POINT> UpdateDB() 
{ 
    var Points = ObjectContext.POINTS.Include("Readings").Include("Items").Include("LatestStatus"); 
    var itemsChanged = new List<POINT>(); 

    foreach (Point point in Points) 
    { 
    int status = CalculateStatus(point); 
    if (point.LatestStatus.FirstOrDefault().Status != status) // Where does this status come from? 
    { 
     ObjectContext.POINTS.FirstOrDefault(p => p.ID == point.ID).LatestStatus.FirstOrDefault().Status = new status // Pseudo code? 
     //point.LatestStatus.FirstOrDefault().Status = new status 
    } 
    } 

    ObjectContext.SaveChanges(); 
} 

然後,您可以調用這個方法:

var ctx = new YourDomainContext(); 

ctx.UpdateDB((op) => 
{ 
    if (op.HasError) 
    // Handle errors. 
    else 
    { 
    // Do stuff. 
    } 
});