0

Windows Phone 用のクラス ライブラリを作成しています。タイトルが示すように、私がやりたいことは、SQL Server CE テーブルのレコードを更新することだけです。私が遭遇したすべての方法には、データベースからレコードをフェッチし、値を手動で更新してから、変更をデータベースにフラッシュすることが含まれます。

ここでの問題は、ライブラリを構築していることです。そのため、どの列がそこにあるのかを事前に知りません。したがって、手動で値を更新することは問題外です。UpdateOnSync次のように使用できるメソッドのような単純なものが必要です。

Contacts.UpdateOnSubmit(contctToUpdate);

Contactsテーブルはどこですか。これはどういうわけか可能ですか?どうやら、Windows Phone や Windows Azure などの SQLite には update メソッドがあり、そのスタイルは LINQ にかなり近いようです。値を手動で変更せずに I レコードを更新するにはどうすればよいですか?

更新 1:テスト用に次のコードを実行しました。それもうまくいきませんでした!

//Get updated items from local to put them in cloud
var newLocalItems = (from TEntity p in localTable
                     where p.LastModified > currentTimeStamp
                     select p).ToList();
foreach (var localItem in newLocalItems)
{
    if (localItem.RemoteId == 0)
    {        
        localItem.LastSynchronized = DateTime.Now;                    
        connection.SubmitChanges();
    }
}

値を手動で変更した後でも、データベースの行は変更されません。更新は、単一のアイテムがフェッチされた場合にのみ機能しますか?

接続を取得する方法は次のとおりです。

public async void ConfigureSQLCE<T>(T mainDataContext) where T : DataContextBase
{           
    MainDB = mainDataContext; //MainDB is class level dynamic
}

GetConnection メソッドは次のとおりです。

private async Task<DataContextBase> GetConnection()
{
    if (!MainDB.DatabaseExists())
    {
        MainDB.CreateDatabase();
    }
    return MainDB;
}

次に、上記のテーブルがクラスに存在しないことで取得connectionします。むしろ、それから派生したクラスに存在します。今この状況をどう乗り切るか。var connection = await GetConnection();DataContextBase

更新 2:モデルに実装した後、プロパティを手動で設定すると、localItem.LastSynchronized = DateTime.Now魔法のように機能し始めました。INotifyPropertyChanged

それでも、元の質問が残っています。アイテムを更新するにはどうすればよいですか?

4

0 に答える 0