我正在为Windows Phone构建一个类库。正如标题所示,我想要做的就是更新SQL Server CE表中的记录。我遇到的所有方法都涉及从数据库中获取记录,手动更新值,然后将更改刷新回数据库。
这里的问题是,我正在建立一个图书馆。所以我事先不知道哪些列会在那里。因此,手动更新值是不可能的。我想要一些更简单的方法,如UpdateOnSync
方法,可以按如下方式使用:
Contacts.UpdateOnSubmit(contctToUpdate);
Contacts
是一张桌子。这有点可能吗?显然,SQLite for Windows Phone,Windows Azure等都有更新方法,它们的风格非常接近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
等属性开始神奇地起作用。
尽管如此,原始问题仍然存在,如何更新项目?