我正在开发一个 WPF 应用程序(.NET 3.5SP1)。场景是这样的:
1.使用 SQL Metal 提取实体定义(和相应的映射文件),然后将其用于数据访问层(所以我使用的是 LINQ to SQL)。
2.使用Unity(这个应用程序是“基于PRISM的”)注册抽象类及其对应的实现(例如IRepository和ActualRepository,IDataContext和ActualContext,IUnitOfWork和ActualUnitOfWork,等等...... - 类名不是真实的,但这在这里并不重要)
3.MVVM风格用于创建ViewModel和View。
插入和删除工作正常..但后来我注意到这种奇怪的行为:
a) 通过创建新记录并填写一些字段,用户只能保存此(新)记录一次!!!如果用户忘记在其他字段中插入一些数据并尝试保存此记录(再次),这些更改不会反映在 dbms 中!
所以用户关闭了应用程序,再次打开应用程序并加载(先前插入的)记录。现在:对这些记录的每一次更改实际上都反映到了 dbms 上!!!
我认为这一定是数据上下文的问题(它是这样创建的:
public SQLDataContext(string connectionString)
{
dc = new DataContext(connectionString, Mapping.GetMapping());
}
)
我做了一些谷歌搜索,发现了一些关于分离对象的问题。我不确定这是否与我的情况有关,但阅读了一些博客我明白它必须!
长话短说:我以为我在表中使用了时间戳字段。
b) Said..done!Et voila:新创建的记录可以在第一次保存后保存不止一次。即使关闭并重新打开应用程序也能正常工作!
但是:出现了一个新问题!
一种观点是使用一些组合框。只要我们正在使用的记录是实际记录,绑定到这些组合框的字段就会正确更新。当我们移动到下一条记录时,先前的当前记录将其字段(绑定到组合框)分配为空!!!!我认为这是一个绑定问题,并在组合框中明确放置了一种双向绑定模式,但没有结果。
这让我抓狂!!!(在情况a)我没有遇到这些问题!!!!)
绑定到 TextBoxes 的字段按预期工作!顺便说一句:我没有收到任何绑定错误!
那么:有人可以解释为什么情况a)会这样吗?为什么 b) 绑定到 WPF 组合框的字段的行为是这样的?
提前致谢