我正在开发一个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组合框的字段表现得像这样?
提前致谢
答案 0 :(得分:0)
如果您在保存后重新使用linq到sql上下文进行选择,请不要这样做。
作为最佳做法,为insert / update / delete创建一个新的上下文,包含在using:
中using(var dc = new DataContext())
{
// Delete/Change/Insert some objects
dc.SaveChanges();
}
在(重新)绑定
时创建另一个新的DataContext
实例