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