使用LINQ-to-SQL更新SQL Server CE表中的记录

时间:2013-10-28 08:25:13

标签: c# linq windows-phone-8 sql-server-ce

我正在为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等属性开始神奇地起作用。

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

0 个答案:

没有答案