0

我正在为 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

尽管如此,原始问题仍然存在,我该如何更新项目?

4

0 回答 0