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