0

サーバー側で編集できますか?

値がプログラムで構成されているテーブルがあり、値は常に変化するため、「更新」でテーブルの値を再計算し、変更をコミットしたいと思います。データをクライアント側に戻す必要はありません。

関連するレコードを変更した後、この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();
}
4

1 に答える 1

0

実行しようとしている変更は従来のCRUD操作ではないため、メソッドにinvoke属性をマークする必要があります。また、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.
  }
});
于 2012-12-17T12:49:24.317 に答える