LINQ to SQL更新WPF应用程序中的问题

时间:2009-12-10 20:57:05

标签: wpf linq-to-sql insert-update

我正在开发一个WPF应用程序(.NET 3.5SP1)。场景是这样的:

1.使用SQL Metal提取实体定义(和相应的映射文件),后来用于数据访问层(所以我使用的是LINQ to SQL)。

2.使用Unity(此应用程序是“基于PRISM”)来注册抽象类及其相应的实现(例如IRepository和ActualRepository,IDataContext和ActualContext,IUnitOfWork和ActualUnitOfWork,等等...... - 类名不是真正的,但这在这里并不重要)

3.MVVM样式用于创建ViewModel和View。

插入和删除工作正常..然后我注意到这种奇怪的行为:

a)通过创建新记录并填写一些字段,用户只能保存此(新)记录!如果用户忘记将某些数据插入其他字段并尝试保存此记录(AGAIN),则这些更改不会反映在dbms中!!!

因此,用户关闭了应用程序,再次打开应用程序并加载(以前插入的)记录。现在:对这些记录的每次更改都实际反映到dbms !!!

我认为这必须是datacontext的问题(以这种方式创建:

public SQLDataContext(string connectionString)
        {
            dc = new DataContext(connectionString, Mapping.GetMapping());
        }

我做了一些谷歌搜索,发现了一些关于分离对象的问题。我不确定这是否与我的情况有关,但阅读一些博客,我明白它必须!

长话短说:我以为我在表格中使用了时间戳字段。

b)说...完成!瞧瞧:新创建的记录可以在第一次保存后保存一次以上。即使关闭和重新打开应用程序也能正常工作!

但是:一个新问题已经过了!

一种观点是使用一些组合框。只要我们正在播放的记录是实际记录,绑定到这些组合框的字段就会得到正确更新。当我们移动到下一条记录时,先前的当前记录将其字段(绑定到组合框)分配给null !!!!我认为这是一个具有约束力的问题,并且在组合框中放置了双向绑定模式,没有结果。

这让我发疯! (在情况a)我没有遇到这些问题!!!!)

绑定到TextBoxes的字段按预期工作! 顺便说一句:我没有收到任何绑定错误!

所以:有人可以解释为什么情况a)表现得像这样吗?为什么b)绑定到WPF组合框的字段表现得像这样?

提前致谢

1 个答案:

答案 0 :(得分:0)

如果您在保存后重新使用linq到sql上下文进行选择,请不要这样做。

作为最佳做法,为insert / update / delete创建一个新的上下文,包含在using:

using(var dc = new DataContext())
{
    // Delete/Change/Insert some objects

    dc.SaveChanges();
}

在(重新)绑定

时创建另一个新的DataContext实例